denikson 5 years ago
parent
commit
8a5a4baba5
175 changed files with 5614 additions and 1392 deletions
  1. 5 5
      Assembly-CSharp.sln
  2. 6 0
      Assembly-CSharp/AbstractFreeModeItem.cs
  3. 1 1
      Assembly-CSharp/AlignmentPresetWindow.cs
  4. 20 17
      Assembly-CSharp/Assembly-CSharp.csproj
  5. 1 2
      Assembly-CSharp/BGObjectWindow.cs
  6. 14 6
      Assembly-CSharp/BGWindow.cs
  7. 9 1
      Assembly-CSharp/BaseInput2.cs
  8. 132 56
      Assembly-CSharp/BaseKagManager.cs
  9. 1 1
      Assembly-CSharp/BasePhotoCustomObject.cs
  10. 1 1
      Assembly-CSharp/BasePhotoWindowManager.cs
  11. 11 20
      Assembly-CSharp/BoneHair2.cs
  12. 247 33
      Assembly-CSharp/BoneMorph_.cs
  13. 56 4
      Assembly-CSharp/CMSystem.cs
  14. 1 1
      Assembly-CSharp/CameraMain.cs
  15. 5 2
      Assembly-CSharp/CharaSelectStatusMgr.cs
  16. 121 0
      Assembly-CSharp/CharacterEdit/HighlightSelector.cs
  17. 38 11
      Assembly-CSharp/CharacterMgr.cs
  18. 63 26
      Assembly-CSharp/CharacterSelectMain.cs
  19. 11 0
      Assembly-CSharp/ClassChangePanel.cs
  20. 8 1
      Assembly-CSharp/ClassUnit.cs
  21. 251 0
      Assembly-CSharp/ConfigVRCtrl.cs
  22. 2 2
      Assembly-CSharp/ControllerShortcutSettingData.cs
  23. 11 6
      Assembly-CSharp/CreateBGObjectSubWindow.cs
  24. 10 1
      Assembly-CSharp/DanceData.cs
  25. 26 14
      Assembly-CSharp/DanceSelect.cs
  26. 15 0
      Assembly-CSharp/DanceSelectMusicInfo.cs
  27. 5 0
      Assembly-CSharp/DanceSetting.cs
  28. 6 0
      Assembly-CSharp/DescScheduleWork.cs
  29. 3 0
      Assembly-CSharp/DescScheduleYotogi.cs
  30. 12 6
      Assembly-CSharp/DeskItemWindow.cs
  31. 12 4
      Assembly-CSharp/DeskManager.cs
  32. 57 11
      Assembly-CSharp/DynamicBone.cs
  33. 108 20
      Assembly-CSharp/DynamicSkirtBone.cs
  34. 1 1
      Assembly-CSharp/EditMod.cs
  35. 6 0
      Assembly-CSharp/EffectWindow.cs
  36. 16 14
      Assembly-CSharp/EmpireLifeModeAPI.cs
  37. 29 0
      Assembly-CSharp/EmpireLifeModeData.cs
  38. 63 19
      Assembly-CSharp/EmpireLifeModeManager.cs
  39. 13 5
      Assembly-CSharp/FaceWindow.cs
  40. 19 0
      Assembly-CSharp/Facility.cs
  41. 11 0
      Assembly-CSharp/FacilityDataTable.cs
  42. 19 0
      Assembly-CSharp/FacilityInfoUI.cs
  43. 1 1
      Assembly-CSharp/FacilityManager.cs
  44. 2 2
      Assembly-CSharp/FacilityPowerUpManager.cs
  45. 16 0
      Assembly-CSharp/FacilityUIPowerUpList.cs
  46. 38 2
      Assembly-CSharp/FacilityUIPowerUpMaterialList.cs
  47. 28 0
      Assembly-CSharp/FacilityUIPreviewParams.cs
  48. 29 0
      Assembly-CSharp/FreeModeItemEveryday.cs
  49. 33 15
      Assembly-CSharp/FreeModeItemList.cs
  50. 29 0
      Assembly-CSharp/FreeModeItemVip.cs
  51. 8 1
      Assembly-CSharp/FreeModeSelect.cs
  52. 47 27
      Assembly-CSharp/FreeSkillSelect.cs
  53. 5 2
      Assembly-CSharp/FullBodyIKCtrl.cs
  54. 23 2
      Assembly-CSharp/GameInShopMain.cs
  55. 5 3
      Assembly-CSharp/GameMain.cs
  56. 3 3
      Assembly-CSharp/GameModeManager.cs
  57. 4 4
      Assembly-CSharp/GameObjectExtension.cs
  58. 30 15
      Assembly-CSharp/GameUty.cs
  59. 1 1
      Assembly-CSharp/GravityControlWindow.cs
  60. 2 2
      Assembly-CSharp/HandSignShortcut.cs
  61. 34 29
      Assembly-CSharp/HideScroll.cs
  62. 19 0
      Assembly-CSharp/I2/Loc/LocalizationManager.cs
  63. 7 0
      Assembly-CSharp/I2/Loc/LocalizationReader.cs
  64. 44 0
      Assembly-CSharp/I2/Loc/Localize.cs
  65. 35 3
      Assembly-CSharp/I2/Loc/LocalizeTarget_NGUI_Label.cs
  66. 1 1
      Assembly-CSharp/I2/Loc/LocalizeTarget_NGUI_Sprite.cs
  67. 25 0
      Assembly-CSharp/I2/Loc/LocalizeTarget_UnityUI_Text.cs
  68. 1 1
      Assembly-CSharp/InfinityColorTextureCache.cs
  69. 18 0
      Assembly-CSharp/KaraokeDataManager.cs
  70. 8 4
      Assembly-CSharp/Kasizuki/KasizukiManager.cs
  71. 6 2
      Assembly-CSharp/Kasizuki/KasizukiSaveAndLoadCtrl.cs
  72. 1 1
      Assembly-CSharp/LifeModeChangeWindow.cs
  73. 35 18
      Assembly-CSharp/LightWindow.cs
  74. 15 0
      Assembly-CSharp/MPN.cs
  75. 8 8
      Assembly-CSharp/MPN_TYPE_RANGE.cs
  76. 221 53
      Assembly-CSharp/Maid.cs
  77. 190 0
      Assembly-CSharp/MaidIdleMotionAdditiveHook.cs
  78. 21 9
      Assembly-CSharp/MaidManagementMain.cs
  79. 27 7
      Assembly-CSharp/MaidParts.cs
  80. 24 0
      Assembly-CSharp/MaidPlate.cs
  81. 3 3
      Assembly-CSharp/MaidProp.cs
  82. 59 20
      Assembly-CSharp/MaidStatus/CsvData/AbstractClassData.cs
  83. 6 0
      Assembly-CSharp/MaidStatus/EnumConvert.cs
  84. 8 4
      Assembly-CSharp/MaidStatus/ParametersPack.cs
  85. 2 2
      Assembly-CSharp/MaidStatus/Status.cs
  86. 321 188
      Assembly-CSharp/Menu.cs
  87. 1 1
      Assembly-CSharp/Misc.cs
  88. 3 3
      Assembly-CSharp/ModCompile.cs
  89. 1 1
      Assembly-CSharp/MotionKagManager.cs
  90. 15 6
      Assembly-CSharp/MotionWindow.cs
  91. 4 0
      Assembly-CSharp/MouseExposition.cs
  92. 243 0
      Assembly-CSharp/NGUILabelLocalizeSupport.cs
  93. 0 87
      Assembly-CSharp/NGUILabelSpacingHold.cs
  94. 24 8
      Assembly-CSharp/ObjectCreateWindow.cs
  95. 31 4
      Assembly-CSharp/ObjectManagerWindow.cs
  96. 50 9
      Assembly-CSharp/OnHoverTaskIcon.cs
  97. 14 11
      Assembly-CSharp/OnaholeNodeMenuChildSecondRow.cs
  98. 8 0
      Assembly-CSharp/OnaholeNodeMenuChildThirdRow.cs
  99. 2 0
      Assembly-CSharp/OnaholeReactionManager.cs
  100. 191 61
      Assembly-CSharp/OvrIK.cs
  101. 4 4
      Assembly-CSharp/PhotTransInput.cs
  102. 12 0
      Assembly-CSharp/PhotoBGData.cs
  103. 13 0
      Assembly-CSharp/PhotoBGObjectData.cs
  104. 4 0
      Assembly-CSharp/PhotoFaceData.cs
  105. 1 1
      Assembly-CSharp/PhotoModeMain.cs
  106. 6 6
      Assembly-CSharp/PhotoModeObjectSave.cs
  107. 7 7
      Assembly-CSharp/PhotoModePoseSave.cs
  108. 4 4
      Assembly-CSharp/PhotoModeSaveAndLoad.cs
  109. 17 0
      Assembly-CSharp/PhotoMotionData.cs
  110. 6 0
      Assembly-CSharp/PhotoNoCharaActive.cs
  111. 4 1
      Assembly-CSharp/PhotoTransTargetObject.cs
  112. 3 3
      Assembly-CSharp/PlacementWindow.cs
  113. 1 1
      Assembly-CSharp/PlayerStatus/Status.cs
  114. 25 4
      Assembly-CSharp/PopupAndButtonList.cs
  115. 38 4
      Assembly-CSharp/PopupAndTabList.cs
  116. 5 4
      Assembly-CSharp/PoseEditWindow.cs
  117. 1 1
      Assembly-CSharp/PresetCtrl.cs
  118. 9 1
      Assembly-CSharp/ProfileCtrl.cs
  119. 4 0
      Assembly-CSharp/RandomPresetContent.cs
  120. 4 0
      Assembly-CSharp/RandomPresetCtrl.cs
  121. 4 3
      Assembly-CSharp/ResultWorkCtrl.cs
  122. 3 0
      Assembly-CSharp/SceneADV.cs
  123. 16 0
      Assembly-CSharp/SceneCharacterSelect.cs
  124. 282 63
      Assembly-CSharp/SceneEdit.cs
  125. 7 0
      Assembly-CSharp/SceneEditInfo.cs
  126. 37 8
      Assembly-CSharp/SceneEditWindow/CustomViewItem.cs
  127. 3 0
      Assembly-CSharp/SceneEditWindow/CustomViewItemData.cs
  128. 33 11
      Assembly-CSharp/SceneEditWindow/CustomViewWindow.cs
  129. 26 4
      Assembly-CSharp/SceneEmpireLifeMode.cs
  130. 155 76
      Assembly-CSharp/SceneFacilityManagement.cs
  131. 1 1
      Assembly-CSharp/ScenePresetWindow.cs
  132. 49 18
      Assembly-CSharp/ScheduleCtrl.cs
  133. 70 20
      Assembly-CSharp/ScheduleMaidStatusUnit.cs
  134. 5 11
      Assembly-CSharp/ScheduleTaskViewer.cs
  135. 46 4
      Assembly-CSharp/ScriptManager.cs
  136. 27 5
      Assembly-CSharp/ShopItem.cs
  137. 50 1
      Assembly-CSharp/StatusCtrl.cs
  138. 6 0
      Assembly-CSharp/StatusMgr.cs
  139. 12 1
      Assembly-CSharp/StatusViewer.cs
  140. 7 2
      Assembly-CSharp/SystemDialog.cs
  141. 3 3
      Assembly-CSharp/SystemShortcut.cs
  142. 51 2
      Assembly-CSharp/TBody.cs
  143. 17 0
      Assembly-CSharp/TBodySkin.cs
  144. 52 11
      Assembly-CSharp/TMorph.cs
  145. 17 2
      Assembly-CSharp/TaskUnit.cs
  146. 0 11
      Assembly-CSharp/UICamera.cs
  147. 18 1
      Assembly-CSharp/UILabel.cs
  148. 26 12
      Assembly-CSharp/UIPopupList.cs
  149. 109 12
      Assembly-CSharp/UIWFConditionList.cs
  150. 107 0
      Assembly-CSharp/UIWidgetlLocalizeSupport.cs
  151. 12 5
      Assembly-CSharp/UndressingWindow.cs
  152. 3 6
      Assembly-CSharp/UnityEngine/EventSystems/StandaloneInputModule2.cs
  153. 192 0
      Assembly-CSharp/VRFaceShortcutConfig.cs
  154. 5 5
      Assembly-CSharp/WindowPartsFingerPreset.cs
  155. 4 4
      Assembly-CSharp/WindowPartsInputColorrPalette.cs
  156. 4 4
      Assembly-CSharp/WindowPartsInputSliderSet.cs
  157. 19 0
      Assembly-CSharp/XVI/AniLipSync/LowLatencyLipSyncContext.cs
  158. 50 15
      Assembly-CSharp/YotogiClassListManager.cs
  159. 27 4
      Assembly-CSharp/YotogiCommandFactory.cs
  160. 9 2
      Assembly-CSharp/YotogiKagManager.cs
  161. 16 3
      Assembly-CSharp/YotogiManager.cs
  162. 6 0
      Assembly-CSharp/YotogiParamScroll.cs
  163. 17 5
      Assembly-CSharp/YotogiParameterViewer.cs
  164. 136 37
      Assembly-CSharp/YotogiPlayManager.cs
  165. 6 1
      Assembly-CSharp/YotogiResultManager.cs
  166. 10 0
      Assembly-CSharp/YotogiSkillContainerViewer.cs
  167. 53 19
      Assembly-CSharp/YotogiSkillListManager.cs
  168. 15 5
      Assembly-CSharp/YotogiSkillSelectManager.cs
  169. 21 6
      Assembly-CSharp/YotogiSkillUnit.cs
  170. 8 2
      Assembly-CSharp/YotogiStageSelectManager.cs
  171. 13 2
      Assembly-CSharp/YotogiStageUnit.cs
  172. 28 11
      Assembly-CSharp/Yotogis/Skill.cs
  173. 46 14
      Assembly-CSharp/Yotogis/SkillAcquisitionCondition.cs
  174. 14 4
      Assembly-CSharp/uGUISelectableSound.cs
  175. 17 0
      Assembly-CSharp/wf/Utility.cs

+ 5 - 5
Assembly-CSharp.sln

@@ -3,7 +3,7 @@ Microsoft Visual Studio Solution File, Format Version 12.00
 # Visual Studio 15
 VisualStudioVersion = 15.0.26228.4
 MinimumVisualStudioVersion = 10.0.40219.1
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp\Assembly-CSharp.csproj", "{E18FECE1-515B-4F53-9E15-A8D2CDDE605D}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp\Assembly-CSharp.csproj", "{6A8B30DC-D758-417A-9525-F6AFFE18E00E}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -11,10 +11,10 @@ Global
 		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{E18FECE1-515B-4F53-9E15-A8D2CDDE605D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{E18FECE1-515B-4F53-9E15-A8D2CDDE605D}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{E18FECE1-515B-4F53-9E15-A8D2CDDE605D}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{E18FECE1-515B-4F53-9E15-A8D2CDDE605D}.Release|Any CPU.Build.0 = Release|Any CPU
+		{6A8B30DC-D758-417A-9525-F6AFFE18E00E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{6A8B30DC-D758-417A-9525-F6AFFE18E00E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{6A8B30DC-D758-417A-9525-F6AFFE18E00E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{6A8B30DC-D758-417A-9525-F6AFFE18E00E}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 6 - 0
Assembly-CSharp/AbstractFreeModeItem.cs

@@ -5,12 +5,18 @@ public abstract class AbstractFreeModeItem
 {
 	public abstract string title { get; }
 
+	public abstract string titleTerm { get; }
+
 	public abstract int item_id { get; }
 
 	public abstract string text { get; }
 
+	public abstract string textTerm { get; }
+
 	public abstract string[] condition_texts { get; }
 
+	public abstract string[] condition_text_terms { get; }
+
 	public abstract bool is_enabled { get; }
 
 	public abstract string play_file_name { get; }

+ 1 - 1
Assembly-CSharp/AlignmentPresetWindow.cs

@@ -209,7 +209,7 @@ public class AlignmentPresetWindow : BaseMaidPhotoWindow
 		GameObject gameObject = UIButton.current.transform.parent.parent.gameObject;
 		int id = int.Parse(gameObject.name);
 		PhotoAlignmentPreset.Data data = PhotoAlignmentPreset.GetData(id);
-		GameMain.Instance.SysDlg.Show("選択した配置に変更します。\n宜しいですか?", SystemDialog.TYPE.OK_CANCEL, delegate
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/配置/ダイアログ/選択した配置に変更します。宜しいですか?", null, SystemDialog.TYPE.OK_CANCEL, delegate
 		{
 			GameMain.Instance.SysDlg.Close();
 			this.ExecAlignmentPreset(data);

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

@@ -4,7 +4,7 @@
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{E18FECE1-515B-4F53-9E15-A8D2CDDE605D}</ProjectGuid>
+    <ProjectGuid>{6A8B30DC-D758-417A-9525-F6AFFE18E00E}</ProjectGuid>
     <OutputType>Library</OutputType>
     <RootNamespace>Assembly-CSharp</RootNamespace>
     <AssemblyName>Assembly-CSharp</AssemblyName>
@@ -34,49 +34,49 @@
   </PropertyGroup>
   <ItemGroup>
     <Reference Include="Assembly-CSharp-firstpass">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\Assembly-CSharp-firstpass.dll</HintPath>
     </Reference>
     <Reference Include="Assembly-UnityScript-firstpass">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\Assembly-UnityScript-firstpass.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\Assembly-UnityScript-firstpass.dll</HintPath>
     </Reference>
     <Reference Include="FoveUnityPlugin">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\FoveUnityPlugin.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\FoveUnityPlugin.dll</HintPath>
     </Reference>
     <Reference Include="Ionic.Zlib">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\Ionic.Zlib.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\Ionic.Zlib.dll</HintPath>
     </Reference>
     <Reference Include="JsonFx.Json">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\JsonFx.Json.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\JsonFx.Json.dll</HintPath>
     </Reference>
     <Reference Include="LeapCSharp.NET3.5">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\LeapCSharp.NET3.5.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\LeapCSharp.NET3.5.dll</HintPath>
     </Reference>
     <Reference Include="System">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\System.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\System.dll</HintPath>
     </Reference>
     <Reference Include="System.Core">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\System.Core.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\System.Core.dll</HintPath>
     </Reference>
     <Reference Include="System.Drawing">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\System.Drawing.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\System.Drawing.dll</HintPath>
     </Reference>
     <Reference Include="System.Windows.Forms">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\System.Windows.Forms.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\System.Windows.Forms.dll</HintPath>
     </Reference>
     <Reference Include="System.Xml">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\System.Xml.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\System.Xml.dll</HintPath>
     </Reference>
     <Reference Include="System.Xml.Linq">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\System.Xml.Linq.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\System.Xml.Linq.dll</HintPath>
     </Reference>
     <Reference Include="UnityEngine">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\UnityEngine.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\UnityEngine.dll</HintPath>
     </Reference>
     <Reference Include="UnityEngine.UI">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\UnityEngine.UI.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\UnityEngine.UI.dll</HintPath>
     </Reference>
     <Reference Include="zxing.unity">
-      <HintPath>..\..\..\..\..\Programs\COM3D2\COM3D2\COM3D2x64_Data\Managed\zxing.unity.dll</HintPath>
+      <HintPath>..\..\com_diff_tmp\com3d2_up123\data\COM3D2x64_Data\Managed\zxing.unity.dll</HintPath>
     </Reference>
   </ItemGroup>
   <ItemGroup>
@@ -229,6 +229,7 @@
     <Compile Include="CCDIKCtrlData.cs" />
     <Compile Include="ChallengeResult.cs" />
     <Compile Include="CharaAppealData.cs" />
+    <Compile Include="CharacterEdit\HighlightSelector.cs" />
     <Compile Include="CharacterMgr.cs" />
     <Compile Include="CharacterSelectMain.cs" />
     <Compile Include="CharacterSelectManager.cs" />
@@ -676,6 +677,7 @@
     <Compile Include="MaidColliderCollect.cs" />
     <Compile Include="MaidExaminationCtrl.cs" />
     <Compile Include="MaidExaminationMgr.cs" />
+    <Compile Include="MaidIdleMotionAdditiveHook.cs" />
     <Compile Include="MaidItemWindow.cs" />
     <Compile Include="MaidManagement.cs" />
     <Compile Include="MaidManagementMain.cs" />
@@ -756,7 +758,7 @@
     <Compile Include="MyRoomCustom\TextureData.cs" />
     <Compile Include="NewBehaviourScript.cs" />
     <Compile Include="NGUIDebug.cs" />
-    <Compile Include="NGUILabelSpacingHold.cs" />
+    <Compile Include="NGUILabelLocalizeSupport.cs" />
     <Compile Include="NGUIMath.cs" />
     <Compile Include="NGUIText.cs" />
     <Compile Include="NGUITools.cs" />
@@ -1383,6 +1385,7 @@
     <Compile Include="UIWFTabPanel.cs" />
     <Compile Include="UIWidget.cs" />
     <Compile Include="UIWidgetContainer.cs" />
+    <Compile Include="UIWidgetlLocalizeSupport.cs" />
     <Compile Include="UIWrapContent.cs" />
     <Compile Include="UI_ImageFitPos.cs" />
     <Compile Include="UI_ParticleImageFit.cs" />

+ 1 - 2
Assembly-CSharp/BGObjectWindow.cs

@@ -160,10 +160,9 @@ public class BGObjectWindow : BaseMaidPhotoWindow
 		this.create_obj_list_.Add(bgObject);
 		this.create_obj_list_.Sort();
 		ObjectManagerWindow objectManagerWindow = this.mgr.GetWindow(PhotoWindowManager.WindowType.ObjectManager) as ObjectManagerWindow;
-		objectManagerWindow.AddTransTargetObject(bgObject.game_object, bgObject.data.name, PhotoTransTargetObject.Type.Prefab);
+		objectManagerWindow.AddTransTargetObject(bgObject.game_object, bgObject.data.name, bgObject.data.termName, PhotoTransTargetObject.Type.Prefab);
 		GameObject gameObject = Utility.CreatePrefab(this.AddGrid.gameObject, "ScenePhotoMode/WindowListItemNormalButton", true);
 		gameObject.name = bgObject.create_time.ToString();
-		gameObject.GetComponentInChildren<UILabel>().text = bgObject.data.name;
 		EventDelegate.Add(gameObject.GetComponent<UIButton>().onClick, new EventDelegate.Callback(this.OnClickRemove));
 		this.AddGrid.Reposition();
 		this.add_scroll_view_.UpdateScrollbars();

+ 14 - 6
Assembly-CSharp/BGWindow.cs

@@ -9,21 +9,29 @@ public class BGWindow : BaseMaidPhotoWindow
 	{
 		base.Awake();
 		PhotoBGData.Create();
-		Dictionary<string, List<KeyValuePair<string, object>>> dictionary = new Dictionary<string, List<KeyValuePair<string, object>>>();
+		Dictionary<string, List<string>> dictionary = new Dictionary<string, List<string>>();
+		Dictionary<string, List<KeyValuePair<string, object>>> dictionary2 = new Dictionary<string, List<KeyValuePair<string, object>>>();
 		foreach (KeyValuePair<string, List<PhotoBGData>> keyValuePair in PhotoBGData.category_list)
 		{
-			if (!dictionary.ContainsKey(keyValuePair.Key))
+			if (!dictionary2.ContainsKey(keyValuePair.Key))
 			{
-				dictionary.Add(keyValuePair.Key, new List<KeyValuePair<string, object>>());
+				dictionary2.Add(keyValuePair.Key, new List<KeyValuePair<string, object>>());
+				dictionary.Add(keyValuePair.Key, new List<string>());
 			}
 			for (int i = 0; i < keyValuePair.Value.Count; i++)
 			{
-				dictionary[keyValuePair.Key].Add(new KeyValuePair<string, object>(keyValuePair.Value[i].name, keyValuePair.Value[i]));
+				dictionary2[keyValuePair.Key].Add(new KeyValuePair<string, object>(keyValuePair.Value[i].name, keyValuePair.Value[i]));
+				dictionary[keyValuePair.Key].Add(keyValuePair.Value[i].nameTerm);
 			}
 		}
-		this.PopupAndTabList.SetData(dictionary, false);
+		if (!GameUty.supportMultiLanguage)
+		{
+			dictionary = null;
+		}
+		this.PopupAndTabList.SetData(dictionary2, dictionary, false);
 		this.PopupAndTabList.onChangePopUpListValue.Add(new Action<KeyValuePair<string, UnityEngine.Object>>(this.OnChangePopUpList));
 		this.PopupAndTabList.onSelect.Add(new Action<object>(this.OnSelectItem));
+		this.PopupAndTabList.popup_term_list = ((!GameUty.supportMultiLanguage) ? null : PhotoBGData.popup_category_term_list);
 		this.PopupAndTabList.popup_value_list = PhotoBGData.popup_category_list;
 		this.CheckSolidColor.onClick.Add(new Action<WFCheckBox>(this.OnClickCheckSolidColorCheckBox));
 		this.ColorInput.onChangeValue.Add(new Action<WindowPartsInputColorrPalette, Color>(this.OnChangeValueColorInput));
@@ -84,7 +92,7 @@ public class BGWindow : BaseMaidPhotoWindow
 		{
 			UnityEngine.Object.DestroyImmediate(obj);
 		}
-		objectManagerWindow.AddTransTargetObject(GameMain.Instance.BgMgr.current_bg_object, bg_data.name, PhotoTransTargetObject.Type.BG);
+		objectManagerWindow.AddTransTargetObject(GameMain.Instance.BgMgr.current_bg_object, bg_data.name, bg_data.nameTerm, PhotoTransTargetObject.Type.BG);
 	}
 
 	public override void OnReset()

+ 9 - 1
Assembly-CSharp/BaseInput2.cs

@@ -23,7 +23,11 @@ public class BaseInput2 : BaseInput
 	{
 		get
 		{
-			return GameMain.Instance.OvrMgr.SystemUICamera.GetOvrVirtualMouseCurrentSidePos();
+			if (GameMain.Instance != null && GameMain.Instance.OvrMgr != null && GameMain.Instance.OvrMgr.SystemUICamera)
+			{
+				return GameMain.Instance.OvrMgr.SystemUICamera.GetOvrVirtualMouseCurrentSidePos();
+			}
+			return Input.mousePosition;
 		}
 	}
 
@@ -53,6 +57,10 @@ public class BaseInput2 : BaseInput
 
 	public override float GetAxisRaw(string axisName)
 	{
+		if (axisName == "Vertical" || axisName == "Horizontal")
+		{
+			return 0f;
+		}
 		return NInput.GetAxis(axisName);
 	}
 }

+ 132 - 56
Assembly-CSharp/BaseKagManager.cs

@@ -65,6 +65,7 @@ public class BaseKagManager : IDisposable
 		this.kag_.AddTagCallBack("alloffset", new KagScript.KagTagCallBack(this.TagAllOffSet));
 		this.kag_.AddTagCallBack("addalloffset", new KagScript.KagTagCallBack(this.TagAddAllOffset));
 		this.kag_.AddTagCallBack("offset", new KagScript.KagTagCallBack(this.TagOffSet));
+		this.kag_.AddTagCallBack("rotatelink", new KagScript.KagTagCallBack(this.TagRotatelink));
 		this.kag_.AddTagCallBack("allresetpos", new KagScript.KagTagCallBack(this.TagAllResetPos));
 		this.kag_.AddTagCallBack("transform", new KagScript.KagTagCallBack(this.TagTransform));
 		this.kag_.AddTagCallBack("position", new KagScript.KagTagCallBack(this.TagPosition));
@@ -342,7 +343,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagFace(KagTagSupport tag_data)
 	{
-		Maid maid = this.GetMaidAndMan(tag_data);
+		Maid maid = this.GetMaidAndMan(tag_data, true);
 		if (maid == null)
 		{
 			return false;
@@ -382,7 +383,7 @@ public class BaseKagManager : IDisposable
 		{
 			"name"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -398,7 +399,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagFaceBlend2(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -463,7 +464,7 @@ public class BaseKagManager : IDisposable
 			"offsettime",
 			"pattern"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -474,7 +475,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagStopKuchipakuPattern(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -485,7 +486,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagLipsync(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -497,7 +498,7 @@ public class BaseKagManager : IDisposable
 	public bool TagMotion(KagTagSupport tag_data)
 	{
 		string text = tag_data.GetTagProperty("mot").AsString() + ".anm";
-		Maid maid = this.GetMaidAndMan(tag_data);
+		Maid maid = this.GetMaidAndMan(tag_data, true);
 		if (maid == null)
 		{
 			return false;
@@ -546,7 +547,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagMotionNext(KagTagSupport tag_data)
 	{
-		Maid maid = this.GetMaidAndMan(tag_data);
+		Maid maid = this.GetMaidAndMan(tag_data, true);
 		if (maid == null)
 		{
 			return false;
@@ -591,7 +592,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagMotionNextAbs(KagTagSupport tag_data)
 	{
-		Maid maid = this.GetMaidAndMan(tag_data);
+		Maid maid = this.GetMaidAndMan(tag_data, true);
 		if (maid == null)
 		{
 			return false;
@@ -636,7 +637,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagMotionStop(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -649,7 +650,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagMotionLayerStop(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -685,7 +686,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagMotionAutoTwist(KagTagSupport tag_data)
 	{
-		Maid maid = this.GetMaidAndMan(tag_data);
+		Maid maid = this.GetMaidAndMan(tag_data, true);
 		if (maid == null)
 		{
 			return false;
@@ -765,7 +766,7 @@ public class BaseKagManager : IDisposable
 		string maid_guid = string.Empty;
 		if (tag_data.IsValid("maid"))
 		{
-			Maid maidAndMan = this.GetMaidAndMan(tag_data);
+			Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 			if (maidAndMan != null)
 			{
 				maid_guid = maidAndMan.status.guid;
@@ -774,7 +775,7 @@ public class BaseKagManager : IDisposable
 		string man_guid = string.Empty;
 		if (tag_data.IsValid("man"))
 		{
-			Maid maidAndMan2 = this.GetMaidAndMan(tag_data);
+			Maid maidAndMan2 = this.GetMaidAndMan(tag_data, false);
 			if (maidAndMan2 != null)
 			{
 				man_guid = maidAndMan2.status.guid;
@@ -845,7 +846,7 @@ public class BaseKagManager : IDisposable
 		{
 			"slot"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -870,7 +871,7 @@ public class BaseKagManager : IDisposable
 		{
 			"hairr"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -897,7 +898,7 @@ public class BaseKagManager : IDisposable
 		{
 			"move"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -930,7 +931,7 @@ public class BaseKagManager : IDisposable
 		{
 			"height"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -2106,7 +2107,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagOffSet(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -2148,14 +2149,69 @@ public class BaseKagManager : IDisposable
 		if (flag)
 		{
 			maidAndMan.SetPos(zero);
+			maidAndMan.baseOffset = zero;
 		}
 		if (flag2)
 		{
 			maidAndMan.SetRot(zero2);
+			maidAndMan.baseEulerAngles = zero2;
 		}
+		if (ScriptManager.isGP001Mode)
+		{
+			maidAndMan.UpdateTransformData();
+		}
+		return false;
+	}
+
+	public bool TagRotatelink(KagTagSupport tag_data)
+	{
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
+		if (maidAndMan == null)
+		{
+			return false;
+		}
+		Maid maidAndMan2 = this.GetMaidAndMan(tag_data, false);
+		if (maidAndMan2 == null)
+		{
+			return false;
+		}
+		maidAndMan.rotateLinkMaid = (maidAndMan2.rotateLinkMaid = string.Empty);
+		if (tag_data.IsValid("clear"))
+		{
+			return false;
+		}
+		maidAndMan.rotateLinkMaid = maidAndMan2.status.guid;
+		maidAndMan2.rotateLinkMaid = maidAndMan.status.guid;
 		return false;
 	}
 
+	public bool TagAxisRotation(KagTagSupport tag_data)
+	{
+		bool flag = false;
+		Vector3 zero = Vector3.zero;
+		if (tag_data.IsValid("rx"))
+		{
+			flag = true;
+			zero.x = tag_data.GetTagProperty("rx").AsReal();
+		}
+		if (tag_data.IsValid("ry"))
+		{
+			flag = true;
+			zero.y = tag_data.GetTagProperty("ry").AsReal();
+		}
+		if (tag_data.IsValid("rz"))
+		{
+			flag = true;
+			zero.z = tag_data.GetTagProperty("rz").AsReal();
+		}
+		if (flag)
+		{
+			Vector3 charaAllOfsetRot = GameMain.Instance.CharacterMgr.GetCharaAllOfsetRot();
+			GameMain.Instance.CharacterMgr.CharaAllOfsetRot(charaAllOfsetRot + zero);
+		}
+		return true;
+	}
+
 	public bool TagAllResetPos(KagTagSupport tag_data)
 	{
 		GameMain.Instance.CharacterMgr.ResetCharaPosAll();
@@ -2164,19 +2220,19 @@ public class BaseKagManager : IDisposable
 
 	public bool TagTransform(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		return maidAndMan == null && false;
 	}
 
 	public bool TagPosition(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		return maidAndMan == null && false;
 	}
 
 	public bool TagRotation(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		return maidAndMan == null && false;
 	}
 
@@ -2224,7 +2280,7 @@ public class BaseKagManager : IDisposable
 		{
 			"chase"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -2532,7 +2588,7 @@ public class BaseKagManager : IDisposable
 		int num = -1;
 		if (!tag_data.IsValid("dummy"))
 		{
-			Maid maidAndMan = this.GetMaidAndMan(tag_data);
+			Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 			if (maidAndMan != null && maidAndMan.Visible)
 			{
 				maidAndMan.AudioMan.LoadPlay(text, GameUty.MillisecondToSecond(millisecond), true, flag);
@@ -2578,7 +2634,7 @@ public class BaseKagManager : IDisposable
 	{
 		if (!tag_data.IsValid("dummy"))
 		{
-			Maid maidAndMan = this.GetMaidAndMan(tag_data);
+			Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 			if (maidAndMan == null)
 			{
 				return false;
@@ -2690,7 +2746,7 @@ public class BaseKagManager : IDisposable
 			"category",
 			"name"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -2706,7 +2762,7 @@ public class BaseKagManager : IDisposable
 			"category",
 			"item"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -2718,14 +2774,14 @@ public class BaseKagManager : IDisposable
 	public bool TagItemReset(KagTagSupport tag_data)
 	{
 		this.CheckAbsolutelyNecessaryTag(tag_data, "itemreset", new string[0]);
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
 		}
 		if (tag_data.IsValid("allwear"))
 		{
-			for (int i = 53; i <= 82; i++)
+			for (int i = 67; i <= 96; i++)
 			{
 				maidAndMan.ResetProp((MPN)i, true);
 			}
@@ -2756,7 +2812,7 @@ public class BaseKagManager : IDisposable
 			"slot",
 			"target"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -2810,7 +2866,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagAllProcPropSeqStart(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -2838,7 +2894,7 @@ public class BaseKagManager : IDisposable
 			"slot",
 			"hide"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -2864,7 +2920,7 @@ public class BaseKagManager : IDisposable
 		{
 			"type"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -2889,7 +2945,7 @@ public class BaseKagManager : IDisposable
 		{
 			"maid"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -2904,7 +2960,7 @@ public class BaseKagManager : IDisposable
 		{
 			"category"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -2943,7 +2999,7 @@ public class BaseKagManager : IDisposable
 		{
 			"category"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3095,7 +3151,7 @@ public class BaseKagManager : IDisposable
 			"bone",
 			"name"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3164,7 +3220,7 @@ public class BaseKagManager : IDisposable
 	public bool TagChinko(KagTagSupport tag_data)
 	{
 		bool chinkoVisible = tag_data.IsValid("on");
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null || !maidAndMan.boMAN)
 		{
 			return false;
@@ -3185,7 +3241,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagOpenMouth(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3203,7 +3259,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagEyeToPosition(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3232,7 +3288,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagEyeToTarget(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3265,7 +3321,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagEyeToCamera(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3295,7 +3351,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagEyeToReset(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3311,7 +3367,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagSetMaidOffsetPos(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3358,7 +3414,7 @@ public class BaseKagManager : IDisposable
 			"target",
 			"penisdetail"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3386,7 +3442,7 @@ public class BaseKagManager : IDisposable
 		{
 			"category"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3414,7 +3470,7 @@ public class BaseKagManager : IDisposable
 			"src",
 			"bone"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3462,7 +3518,7 @@ public class BaseKagManager : IDisposable
 		{
 			"name"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3473,7 +3529,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagDelPrefabCharaAll(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3491,7 +3547,7 @@ public class BaseKagManager : IDisposable
 			"play",
 			"loop"
 		});
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -3988,7 +4044,7 @@ public class BaseKagManager : IDisposable
 			"r",
 			"s"
 		});
-		Maid maid = this.GetMaidAndMan(tag_data);
+		Maid maid = this.GetMaidAndMan(tag_data, true);
 		if (maid == null)
 		{
 			return false;
@@ -4099,7 +4155,7 @@ public class BaseKagManager : IDisposable
 
 	public bool TagTexMulDel(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = this.GetMaidAndMan(tag_data);
+		Maid maidAndMan = this.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;
@@ -4870,13 +4926,29 @@ public class BaseKagManager : IDisposable
 		return null;
 	}
 
-	public Maid GetMaidAndMan(KagTagSupport tag_data)
+	public Maid GetMaidAndMan(KagTagSupport tag_data, bool maid_priority = true)
 	{
 		int num = 0;
 		bool flag = false;
-		if (tag_data.IsValid("maid"))
+		if (maid_priority)
 		{
-			num = tag_data.GetTagProperty("maid").AsInteger();
+			if (tag_data.IsValid("maid"))
+			{
+				num = tag_data.GetTagProperty("maid").AsInteger();
+			}
+			else if (tag_data.IsValid("man"))
+			{
+				flag = true;
+				num = tag_data.GetTagProperty("man").AsInteger();
+				if (this.script_mgr_.compatibilityMode && 6 <= num)
+				{
+					num = 5;
+				}
+			}
+			else
+			{
+				NDebug.Assert("スクリプトのman/maid指定が不正です。", false);
+			}
 		}
 		else if (tag_data.IsValid("man"))
 		{
@@ -4887,6 +4959,10 @@ public class BaseKagManager : IDisposable
 				num = 5;
 			}
 		}
+		else if (tag_data.IsValid("maid"))
+		{
+			num = tag_data.GetTagProperty("maid").AsInteger();
+		}
 		else
 		{
 			NDebug.Assert("スクリプトのman/maid指定が不正です。", false);
@@ -5027,7 +5103,7 @@ public class BaseKagManager : IDisposable
 	public void Serialize(BinaryWriter binary)
 	{
 		binary.Write("CM3D2_KAG");
-		binary.Write(1210);
+		binary.Write(1230);
 		byte[] array = this.kag_.Serialize();
 		int value = array.Length;
 		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))
 			{
 				binaryWriter.Write("COM3D2_PHOTO_CUSTOM_OBJECT");
-				binaryWriter.Write(1210);
+				binaryWriter.Write(1230);
 				binaryWriter.Write(this.type.ToString());
 				binaryWriter.Write(this.scale_);
 				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))
 			{
 				binaryWriter.Write(this.save_header_uidata);
-				binaryWriter.Write(1210);
+				binaryWriter.Write(1230);
 				binaryWriter.Write(this.save_data_.Count);
 				foreach (KeyValuePair<string, Dictionary<string, Dictionary<string, string>>> keyValuePair3 in this.save_data_)
 				{

+ 11 - 20
Assembly-CSharp/BoneHair2.cs

@@ -1,5 +1,4 @@
 using System;
-using System.Collections.Generic;
 using UnityEngine;
 
 public class BoneHair2
@@ -15,16 +14,9 @@ public class BoneHair2
 
 	public void Uninit()
 	{
-		if (this.m_listCollders != null)
+		if (this.m_db != null)
 		{
-			for (int i = 0; i < this.m_listCollders.Count; i++)
-			{
-				if (this.m_listCollders[i] != null)
-				{
-					UnityEngine.Object.DestroyImmediate(this.m_listCollders[i].gameObject);
-				}
-			}
-			this.m_listCollders.Clear();
+			this.m_db.Uninit();
 		}
 	}
 
@@ -56,8 +48,8 @@ public class BoneHair2
 				0.7f
 			};
 		}
-		DynamicBone dynamicBone = ImportCM.TryLoadDynamicBone(f_goRoot, parent, text, this.m_BodySkin.body, f_aryDefStiffness);
-		if (dynamicBone == null)
+		this.m_db = ImportCM.TryLoadDynamicBone(f_goRoot, parent, text, this.m_BodySkin.body, f_aryDefStiffness);
+		if (this.m_db == null)
 		{
 			string f_strFileName = string.Empty;
 			if (yureType == BoneHair2.YureType.Hair)
@@ -101,19 +93,19 @@ public class BoneHair2
 			{
 				f_strFileName = "default_yure";
 			}
-			dynamicBone = ImportCM.TryLoadDynamicBone(f_goRoot, parent, f_strFileName, this.m_BodySkin.body, f_aryDefStiffness);
-			if (dynamicBone == null)
+			this.m_db = ImportCM.TryLoadDynamicBone(f_goRoot, parent, f_strFileName, this.m_BodySkin.body, f_aryDefStiffness);
+			if (this.m_db == null)
 			{
 				return false;
 			}
 		}
-		if (!string.IsNullOrEmpty(dynamicBone.m_ColliderFileName))
+		if (!string.IsNullOrEmpty(this.m_db.m_ColliderFileName))
 		{
-			ImportCM.LoadDynamicCollilder(dynamicBone, dynamicBone.m_ColliderFileName, this.m_BodySkin.body.m_trBones, this.m_BodySkin.body.maid);
+			ImportCM.LoadDynamicCollilder(this.m_db, this.m_db.m_ColliderFileName, this.m_BodySkin.body.m_trBones, this.m_BodySkin.body.maid);
 		}
 		else if (GameUty.IsExistFile(text + ".col", null))
 		{
-			ImportCM.LoadDynamicCollilder(dynamicBone, text, this.m_BodySkin.body.m_trBones, this.m_BodySkin.body.maid);
+			ImportCM.LoadDynamicCollilder(this.m_db, text, this.m_BodySkin.body.m_trBones, this.m_BodySkin.body.maid);
 		}
 		else
 		{
@@ -140,10 +132,9 @@ public class BoneHair2
 			}
 			if (!string.IsNullOrEmpty(text2))
 			{
-				ImportCM.LoadDynamicCollilder(dynamicBone, text2, this.m_BodySkin.body.m_trBones, this.m_BodySkin.body.maid);
+				ImportCM.LoadDynamicCollilder(this.m_db, text2, this.m_BodySkin.body.m_trBones, this.m_BodySkin.body.maid);
 			}
 		}
-		this.m_listCollders = dynamicBone.m_Colliders;
 		return true;
 	}
 
@@ -178,7 +169,7 @@ public class BoneHair2
 
 	private TBodySkin m_BodySkin;
 
-	private List<DynamicBoneColliderBase> m_listCollders;
+	private DynamicBone m_db;
 
 	private enum YureType
 	{

+ 247 - 33
Assembly-CSharp/BoneMorph_.cs

@@ -25,41 +25,117 @@ public class BoneMorph_
 	{
 		this.m_listBoneMorphPos.Clear();
 		this.m_listBoneMorphScl.Clear();
+		this.m_listBoneMorphRot.Clear();
 	}
 
 	public void InitBoneMorphEdit(Transform t, MPN f_mpn, TBody.SlotID f_slot)
 	{
+		Func<string, Transform, BoneMorph_.BoneMorphPos> func = delegate(string propertyName, Transform boneTrans)
+		{
+			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == propertyName);
+			this.m_listBoneMorphPos.Add(new BoneMorph_.BoneMorphPos(propertyName, boneTrans));
+			return this.m_listBoneMorphPos[this.m_listBoneMorphPos.Count - 1];
+		};
+		Func<string, Transform, BoneMorph_.BoneMorphRotatio> func2 = delegate(string propertyName, Transform boneTrans)
+		{
+			this.m_listBoneMorphRot.RemoveAll((BoneMorph_.BoneMorphRotatio f) => f.strPropName == propertyName);
+			this.m_listBoneMorphRot.Add(new BoneMorph_.BoneMorphRotatio(propertyName, boneTrans));
+			return this.m_listBoneMorphRot[this.m_listBoneMorphRot.Count - 1];
+		};
+		Func<string, Transform, BoneMorph_.BoneMorphScl> func3 = delegate(string propertyName, Transform boneTrans)
+		{
+			this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == propertyName);
+			this.m_listBoneMorphScl.Add(new BoneMorph_.BoneMorphScl(propertyName, boneTrans));
+			return this.m_listBoneMorphScl[this.m_listBoneMorphScl.Count - 1];
+		};
 		if (f_mpn == MPN.head && f_slot == TBody.SlotID.head)
 		{
-			Transform transform = CMT.SearchObjName(t, "Mayupos", false);
-			if (transform != null)
+			Transform transform = CMT.SearchObjName(t, "Ear_L", false);
+			bool flag = transform != null;
+			if (flag)
 			{
 				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "MayuY");
-				this.m_listBoneMorphPos.Add(new BoneMorph_.BoneMorphPos("MayuY", transform));
 			}
-			Transform transform2 = CMT.SearchObjName(t, "Eye_L", false);
+			else
+			{
+				HashSet<string> gp001AddPropNames = new HashSet<string>(new string[]
+				{
+					"Earrot_L",
+					"Earrot_R",
+					"Earscl_L",
+					"Earscl_R",
+					"Nosepos",
+					"Nosescl",
+					"Mayupos_L",
+					"Mayupos_R",
+					"Mayurot_L",
+					"Mayurot_R"
+				});
+				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));
+			}
+			if (transform != null)
+			{
+				func2("Earrot_L", transform);
+				func3("Earscl_L", transform);
+			}
+			Transform transform2 = CMT.SearchObjName(t, "Ear_R", false);
 			if (transform2 != null)
 			{
-				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosXL");
-				this.m_listBoneMorphPos.Add(new BoneMorph_.BoneMorphPos("EyeBallPosXL", transform2));
-				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosYL");
-				this.m_listBoneMorphPos.Add(new BoneMorph_.BoneMorphPos("EyeBallPosYL", transform2, new Vector3(0.00325f, -0.005f, 0f), new Vector3(0f, 0.004f, 0f)));
-				this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclXL");
-				this.m_listBoneMorphScl.Add(new BoneMorph_.BoneMorphScl("EyeBallSclXL", transform2, new Vector3(0f, -0.3f, -0.3f), new Vector3(0f, 0.1f, 0.1f)));
-				this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclYL");
-				this.m_listBoneMorphScl.Add(new BoneMorph_.BoneMorphScl("EyeBallSclYL", transform2, new Vector3(0f, -0.3f, -0.3f), new Vector3(0f, 0.1f, 0.1f)));
+				func2("Earrot_R", transform2);
+				func3("Earscl_R", transform2);
 			}
-			Transform transform3 = CMT.SearchObjName(t, "Eye_R", false);
+			Transform transform3 = CMT.SearchObjName(t, "Nose", false);
 			if (transform3 != null)
 			{
-				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosXR");
-				this.m_listBoneMorphPos.Add(new BoneMorph_.BoneMorphPos("EyeBallPosXR", transform3));
-				this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosYR");
-				this.m_listBoneMorphPos.Add(new BoneMorph_.BoneMorphPos("EyeBallPosYR", transform3, new Vector3(0.00325f, 0.005f, 0f), new Vector3(0f, -0.004f, 0f)));
-				this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclXR");
-				this.m_listBoneMorphScl.Add(new BoneMorph_.BoneMorphScl("EyeBallSclXR", transform3, new Vector3(0f, -0.3f, -0.3f), new Vector3(0f, 0.1f, 0.1f)));
-				this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclYR");
-				this.m_listBoneMorphScl.Add(new BoneMorph_.BoneMorphScl("EyeBallSclYR", transform3, new Vector3(0f, -0.3f, -0.3f), new Vector3(0f, 0.1f, 0.1f)));
+				func("Nosepos", transform3);
+				func3("Nosescl", transform3);
+			}
+			Transform transform4 = CMT.SearchObjName(t, "Mayupos", false);
+			if (transform4 != null)
+			{
+				func("MayuY", transform4);
+			}
+			Transform transform5 = CMT.SearchObjName(t, "Mayupos_L", false);
+			if (transform5 != null)
+			{
+				func("Mayupos_L", transform5);
+				func2("Mayurot_L", transform5);
+			}
+			Transform transform6 = CMT.SearchObjName(t, "Mayupos_R", false);
+			if (transform6 != null)
+			{
+				func("Mayupos_R", transform6);
+				func2("Mayurot_R", transform6);
+			}
+			Transform transform7 = CMT.SearchObjName(t, "Eye_L", false);
+			if (transform7 != null)
+			{
+				func("EyeBallPosXL", transform7);
+				BoneMorph_.BoneMorphPos boneMorphPos = func("EyeBallPosYL", transform7);
+				boneMorphPos.m_vAddMin += new Vector3(0.00325f, -0.005f, 0f);
+				boneMorphPos.m_vAddMax += new Vector3(0f, 0.004f, 0f);
+				BoneMorph_.BoneMorphScl boneMorphScl = func3("EyeBallSclXL", transform7);
+				boneMorphScl.m_vAddMin += new Vector3(0f, -0.3f, -0.3f);
+				boneMorphScl.m_vAddMax += new Vector3(0f, 0.1f, 0.1f);
+				boneMorphScl = func3("EyeBallSclYL", transform7);
+				boneMorphScl.m_vAddMin += new Vector3(0f, -0.3f, -0.3f);
+				boneMorphScl.m_vAddMax += new Vector3(0f, 0.1f, 0.1f);
+			}
+			Transform transform8 = CMT.SearchObjName(t, "Eye_R", false);
+			if (transform8 != null)
+			{
+				func("EyeBallPosXR", transform8);
+				BoneMorph_.BoneMorphPos boneMorphPos2 = func("EyeBallPosYR", transform8);
+				boneMorphPos2.m_vAddMin += new Vector3(0.00325f, 0.005f, 0f);
+				boneMorphPos2.m_vAddMax += new Vector3(0f, -0.004f, 0f);
+				BoneMorph_.BoneMorphScl boneMorphScl2 = func3("EyeBallSclXR", transform8);
+				boneMorphScl2.m_vAddMin += new Vector3(0f, -0.3f, -0.3f);
+				boneMorphScl2.m_vAddMax += new Vector3(0f, 0.1f, 0.1f);
+				boneMorphScl2 = func3("EyeBallSclYR", transform8);
+				boneMorphScl2.m_vAddMin += new Vector3(0f, -0.3f, -0.3f);
+				boneMorphScl2.m_vAddMax += new Vector3(0f, 0.1f, 0.1f);
 			}
 		}
 	}
@@ -68,15 +144,31 @@ public class BoneMorph_
 	{
 		if (f_mpn == MPN.head && f_slot == TBody.SlotID.head)
 		{
-			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "MayuY");
-			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosXL");
-			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosYL");
-			this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclXL");
-			this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclXR");
-			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosXR");
-			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => f.strPropName == "EyeBallPosYR");
-			this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclYL");
-			this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => f.strPropName == "EyeBallSclYR");
+			HashSet<string> removeTargetPropNames = new HashSet<string>(new string[]
+			{
+				"Earrot_L",
+				"Earrot_R",
+				"Earscl_L",
+				"Earscl_R",
+				"Nosepos",
+				"Nosescl",
+				"MayuY",
+				"Mayupos_L",
+				"Mayupos_R",
+				"Mayurot_L",
+				"Mayurot_R",
+				"EyeBallPosXL",
+				"EyeBallPosYL",
+				"EyeBallSclXL",
+				"EyeBallSclXR",
+				"EyeBallPosXR",
+				"EyeBallPosYR",
+				"EyeBallSclYL",
+				"EyeBallSclYR"
+			});
+			this.m_listBoneMorphPos.RemoveAll((BoneMorph_.BoneMorphPos f) => removeTargetPropNames.Contains(f.strPropName));
+			this.m_listBoneMorphRot.RemoveAll((BoneMorph_.BoneMorphRotatio f) => removeTargetPropNames.Contains(f.strPropName));
+			this.m_listBoneMorphScl.RemoveAll((BoneMorph_.BoneMorphScl f) => removeTargetPropNames.Contains(f.strPropName));
 		}
 	}
 
@@ -153,6 +245,16 @@ public class BoneMorph_
 		}
 	}
 
+	public void ChangeMorphRotatioValue(string strPropName, string f_strBoneName, Vector3 f_fAddMin, Vector3 f_fAddMax)
+	{
+		BoneMorph_.BoneMorphRotatio boneMorphRotatio = this.m_listBoneMorphRot.Find((BoneMorph_.BoneMorphRotatio f) => f.strPropName == strPropName && f.trBone.name == f_strBoneName);
+		if (boneMorphRotatio != null)
+		{
+			boneMorphRotatio.m_vAddMin = boneMorphRotatio.m_vDefRotate * Quaternion.Euler(f_fAddMin);
+			boneMorphRotatio.m_vAddMax = boneMorphRotatio.m_vDefRotate * Quaternion.Euler(f_fAddMax);
+		}
+	}
+
 	public void Blend()
 	{
 		for (int i = this.bones.Count - 1; i >= 0; i--)
@@ -238,9 +340,26 @@ public class BoneMorph_
 		for (int k = 0; k < this.m_listBoneMorphPos.Count; k++)
 		{
 			BoneMorph_.BoneMorphPos boneMorphPos = this.m_listBoneMorphPos[k];
-			if (boneMorphPos.strPropName == "MayuY")
+			if (boneMorphPos.strPropName == "Nosepos")
 			{
-				boneMorphPos.trBone.localPosition = ((this.POS_MayuY > 0.5f) ? Vector3.Lerp(boneMorphPos.m_vDefPos, boneMorphPos.m_vAddMax, (this.POS_MayuY - 0.5f) / 0.5f) : Vector3.Lerp(boneMorphPos.m_vAddMin, boneMorphPos.m_vDefPos, this.POS_MayuY / 0.5f));
+				boneMorphPos.trBone.localPosition = boneMorphPos.Lerp(this.POS_Nose);
+			}
+			else if (boneMorphPos.strPropName == "MayuY")
+			{
+				boneMorphPos.trBone.localPosition = boneMorphPos.Lerp(this.POS_MayuY);
+			}
+			else if (boneMorphPos.strPropName == "Mayupos_L" || boneMorphPos.strPropName == "Mayupos_R")
+			{
+				Vector3 vector3 = boneMorphPos.Lerp(this.POS_MayuY);
+				float x = boneMorphPos.m_vAddMin.x;
+				boneMorphPos.m_vAddMin = new Vector3(boneMorphPos.m_vAddMax.x, boneMorphPos.m_vAddMin.y, boneMorphPos.m_vAddMin.z);
+				boneMorphPos.m_vAddMax = new Vector3(x, boneMorphPos.m_vAddMax.y, boneMorphPos.m_vAddMax.z);
+				Vector3 vector4 = boneMorphPos.Lerp(this.POS_MayuX);
+				x = boneMorphPos.m_vAddMax.x;
+				boneMorphPos.m_vAddMax = new Vector3(boneMorphPos.m_vAddMin.x, boneMorphPos.m_vAddMax.y, boneMorphPos.m_vAddMax.z);
+				boneMorphPos.m_vAddMin = new Vector3(x, boneMorphPos.m_vAddMin.y, boneMorphPos.m_vAddMin.z);
+				float x2 = vector4.x + vector3.x - boneMorphPos.m_vDefPos.x;
+				boneMorphPos.trBone.localPosition = new Vector3(x2, vector3.y, vector4.z);
 			}
 			else if (boneMorphPos.strPropName == "EyeBallPosYL" || boneMorphPos.strPropName == "EyeBallPosYR")
 			{
@@ -250,7 +369,15 @@ public class BoneMorph_
 		for (int l = 0; l < this.m_listBoneMorphScl.Count; l++)
 		{
 			BoneMorph_.BoneMorphScl boneMorphScl = this.m_listBoneMorphScl[l];
-			if (boneMorphScl.strPropName == "EyeBallSclXL" || boneMorphScl.strPropName == "EyeBallSclXR")
+			if (boneMorphScl.strPropName == "Earscl_L" || boneMorphScl.strPropName == "Earscl_R")
+			{
+				boneMorphScl.trBone.localScale = boneMorphScl.Lerp(this.SCALE_Ear);
+			}
+			else if (boneMorphScl.strPropName == "Nosescl")
+			{
+				boneMorphScl.trBone.localScale = boneMorphScl.Lerp(this.SCALE_Nose);
+			}
+			else if (boneMorphScl.strPropName == "EyeBallSclXL" || boneMorphScl.strPropName == "EyeBallSclXR")
 			{
 				float z = (this.EyeBallSclX >= 0.5f) ? Mathf.Lerp(boneMorphScl.m_vDefScl.z, boneMorphScl.m_vAddMax.z, (this.EyeBallSclX - 0.5f) / 0.5f) : Mathf.Lerp(boneMorphScl.m_vAddMin.z, boneMorphScl.m_vDefScl.z, this.EyeBallSclX / 0.5f);
 				Vector3 localScale = boneMorphScl.trBone.localScale;
@@ -265,6 +392,17 @@ public class BoneMorph_
 				boneMorphScl.trBone.localScale = localScale2;
 			}
 		}
+		foreach (BoneMorph_.BoneMorphRotatio boneMorphRotatio in this.m_listBoneMorphRot)
+		{
+			if (boneMorphRotatio.strPropName == "Earrot_L" || boneMorphRotatio.strPropName == "Earrot_R")
+			{
+				boneMorphRotatio.trBone.localRotation = boneMorphRotatio.Lerp(this.ROT_Ear);
+			}
+			if (boneMorphRotatio.strPropName == "Mayurot_L" || boneMorphRotatio.strPropName == "Mayurot_R")
+			{
+				boneMorphRotatio.trBone.localRotation = boneMorphRotatio.Lerp(this.ROT_Mayu);
+			}
+		}
 	}
 
 	private TextAsset textUserDef1;
@@ -303,8 +441,20 @@ public class BoneMorph_
 
 	public float SCALE_HeadY = 1f;
 
+	public float POS_Nose = 0.5f;
+
+	public float SCALE_Nose = 0.5f;
+
+	public float ROT_Ear = 0.5f;
+
+	public float SCALE_Ear = 0.5f;
+
+	public float POS_MayuX = 0.5f;
+
 	public float POS_MayuY = 0.5f;
 
+	public float ROT_Mayu = 0.5f;
+
 	public List<BoneMorphLocal> bones;
 
 	public float SnityouOutScale = 1f;
@@ -315,6 +465,8 @@ public class BoneMorph_
 
 	private List<BoneMorph_.BoneMorphScl> m_listBoneMorphScl = new List<BoneMorph_.BoneMorphScl>();
 
+	private List<BoneMorph_.BoneMorphRotatio> m_listBoneMorphRot = new List<BoneMorph_.BoneMorphRotatio>();
+
 	private static StringBuilder sbMinM = new StringBuilder(32);
 
 	private static StringBuilder sbMinP = new StringBuilder(32);
@@ -341,6 +493,23 @@ public class BoneMorph_
 			this.m_vAddMax = this.m_vDefPos + f_vAddMax;
 		}
 
+		public Vector3 Lerp(float t)
+		{
+			return BoneMorph_.BoneMorphPos.Lerp(this.m_vAddMin, this.m_vDefPos, this.m_vAddMax, t);
+		}
+
+		public static Vector3 Lerp(Vector3 min, Vector3 def, Vector3 max, float t)
+		{
+			float t2 = (t > 0.5f) ? ((t - 0.5f) / 0.5f) : (t / 0.5f);
+			return (t > 0.5f) ? Vector3.Lerp(def, max, t2) : Vector3.Lerp(min, def, t2);
+		}
+
+		public static float Lerp(float min, float def, float max, float t)
+		{
+			float t2 = (t > 0.5f) ? ((t - 0.5f) / 0.5f) : (t / 0.5f);
+			return (t > 0.5f) ? Mathf.Lerp(def, max, t2) : Mathf.Lerp(min, def, t2);
+		}
+
 		public string strPropName;
 
 		public Transform trBone;
@@ -370,6 +539,11 @@ public class BoneMorph_
 			this.m_vAddMax = this.m_vDefScl + f_vAddMax;
 		}
 
+		public Vector3 Lerp(float t)
+		{
+			return BoneMorph_.BoneMorphPos.Lerp(this.m_vAddMin, this.m_vDefScl, this.m_vAddMax, t);
+		}
+
 		public string strPropName;
 
 		public Transform trBone;
@@ -380,4 +554,44 @@ public class BoneMorph_
 
 		public Vector3 m_vAddMax;
 	}
+
+	private class BoneMorphRotatio
+	{
+		public BoneMorphRotatio(string f_strPropName, Transform f_trBone)
+		{
+			this.strPropName = f_strPropName;
+			this.trBone = f_trBone;
+			this.m_vAddMin = (this.m_vAddMax = (this.m_vDefRotate = f_trBone.localRotation));
+		}
+
+		public BoneMorphRotatio(string f_strPropName, Transform f_trBone, Quaternion f_vAddMin, Quaternion f_vAddMax)
+		{
+			this.strPropName = f_strPropName;
+			this.trBone = f_trBone;
+			this.m_vDefRotate = f_trBone.localRotation;
+			this.m_vAddMin = this.m_vDefRotate * f_vAddMin;
+			this.m_vAddMax = this.m_vDefRotate * f_vAddMax;
+		}
+
+		public Quaternion Lerp(float t)
+		{
+			return BoneMorph_.BoneMorphRotatio.Lerp(this.m_vAddMin, this.m_vDefRotate, this.m_vAddMax, t);
+		}
+
+		public static Quaternion Lerp(Quaternion min, Quaternion def, Quaternion max, float t)
+		{
+			float t2 = (t > 0.5f) ? ((t - 0.5f) / 0.5f) : (t / 0.5f);
+			return (t > 0.5f) ? Quaternion.Lerp(def, max, t2) : Quaternion.Lerp(min, def, t2);
+		}
+
+		public string strPropName;
+
+		public Transform trBone;
+
+		public Quaternion m_vDefRotate;
+
+		public Quaternion m_vAddMin;
+
+		public Quaternion m_vAddMax;
+	}
 }

+ 56 - 4
Assembly-CSharp/CMSystem.cs

@@ -808,7 +808,7 @@ public class CMSystem
 	{
 		XElement xelement = new XElement("Config", new object[]
 		{
-			new XAttribute("Version", 1210),
+			new XAttribute("Version", 1230),
 			new XElement("System", new XElement("SysButtonShowAlways", this.SysButtonShowAlways)),
 			new XElement("Screen", new object[]
 			{
@@ -1125,7 +1125,7 @@ public class CMSystem
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_SYSTEM2");
-		binaryWriter.Write(1210);
+		binaryWriter.Write(1230);
 		binaryWriter.Write(this.m_dicEditColorPresetData.Count);
 		foreach (KeyValuePair<int, Dictionary<string, int>> keyValuePair in this.m_dicEditColorPresetData)
 		{
@@ -1695,9 +1695,45 @@ public class CMSystem
 			}
 		}
 
+		public bool OvrHandHitToHair
+		{
+			get
+			{
+				return this.m_bOvrHandHitToHair;
+			}
+			set
+			{
+				this.m_bOvrHandHitToHair = value;
+			}
+		}
+
+		public CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT OvrHandHitToSkirt
+		{
+			get
+			{
+				return this.m_eOvrHandHitToSkirt;
+			}
+			set
+			{
+				this.m_eOvrHandHitToSkirt = value;
+			}
+		}
+
+		public CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT OvrHandHitToSkirtVAS
+		{
+			get
+			{
+				return this.m_eOvrHandHitToSkirtVAS;
+			}
+			set
+			{
+				this.m_eOvrHandHitToSkirtVAS = value;
+			}
+		}
+
 		public void OnBeforeSerialize()
 		{
-			this.m_nVersion = 1210;
+			this.m_nVersion = 1230;
 		}
 
 		public void OnAfterDeserialize()
@@ -1705,7 +1741,7 @@ public class CMSystem
 		}
 
 		[SerializeField]
-		private int m_nVersion = 1210;
+		private int m_nVersion = 1230;
 
 		[SerializeField]
 		private string m_strDShowFilter = "Microsoft DTV-DVD Video Decoder";
@@ -1752,10 +1788,26 @@ public class CMSystem
 		[SerializeField]
 		private bool m_bOvrTabletFrameHideWhenMsgWndVisible = true;
 
+		[SerializeField]
+		private bool m_bOvrHandHitToHair = true;
+
+		[SerializeField]
+		private CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT m_eOvrHandHitToSkirt = CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.ON;
+
+		[SerializeField]
+		private CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT m_eOvrHandHitToSkirtVAS = CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.GRAB;
+
 		public enum OVR_MOVE_TYPE
 		{
 			WARP_DRAW_STEPROT,
 			DIRECTION
 		}
+
+		public enum OVR_HAND_TO_SKIRT
+		{
+			OFF,
+			GRAB,
+			ON
+		}
 	}
 }

+ 1 - 1
Assembly-CSharp/CameraMain.cs

@@ -924,7 +924,7 @@ public class CameraMain : MonoBehaviour
 					UIPanel component2 = uiroot.GetComponent<UIPanel>();
 					if (!(component2 == null))
 					{
-						if (0 > component2.name.ToLower().IndexOf("fix"))
+						if (0 > component2.name.ToLower().IndexOf("fix") && 0f < component2.alpha)
 						{
 							component2.alpha = 0f;
 							this.ui_cam_hide_list_.Add(uicamera);

+ 5 - 2
Assembly-CSharp/CharaSelectStatusMgr.cs

@@ -5,12 +5,15 @@ public class CharaSelectStatusMgr : StatusMgr
 {
 	public override void Init()
 	{
-		this.m_goPanel = this.statusCtrl.gameObject;
-		this.m_ctrl = this.statusCtrl;
+		this.m_ctrl = (GameUty.supportMultiLanguage ? this.statusLocalizeCtrl : this.statusCtrl);
+		this.m_goPanel = this.m_ctrl.gameObject;
 		this.m_ctrl.Init(this, this.m_goPanel);
 		this.m_goPanel.SetActive(false);
 	}
 
 	[SerializeField]
 	public StatusCtrl statusCtrl;
+
+	[SerializeField]
+	public StatusCtrl statusLocalizeCtrl;
 }

+ 121 - 0
Assembly-CSharp/CharacterEdit/HighlightSelector.cs

@@ -0,0 +1,121 @@
+using System;
+using UnityEngine;
+
+namespace CharacterEdit
+{
+	public class HighlightSelector : MonoBehaviour
+	{
+		public HighlightSelector.SelectItem selectItem
+		{
+			get
+			{
+				UIWFTabButton selectButtonObject = this.panel.GetSelectButtonObject();
+				foreach (HighlightSelector.Data data in this.datas)
+				{
+					if (selectButtonObject == data.button)
+					{
+						return data.type;
+					}
+				}
+				return HighlightSelector.SelectItem.Eye;
+			}
+			set
+			{
+				foreach (HighlightSelector.Data data in this.datas)
+				{
+					if (value == data.type)
+					{
+						if (data.button != this.panel.GetSelectButtonObject())
+						{
+							this.panel.Select(data.button);
+						}
+						return;
+					}
+				}
+			}
+		}
+
+		public bool visible
+		{
+			get
+			{
+				return base.gameObject.activeSelf;
+			}
+			set
+			{
+				base.gameObject.SetActive(value);
+			}
+		}
+
+		private void Awake()
+		{
+			this.panel.UpdateChildren();
+			this.selectItem = HighlightSelector.SelectItem.Eye;
+			foreach (HighlightSelector.Data data in this.datas)
+			{
+				EventDelegate.Add(data.button.onSelect, new EventDelegate.Callback(this.OnClickEvetn));
+			}
+		}
+
+		private void OnClickEvetn()
+		{
+			if (!UIWFSelectButton.current.isSelected)
+			{
+				return;
+			}
+			if (this.onChangeSelectItem != null)
+			{
+				this.onChangeSelectItem(this.selectItem);
+			}
+		}
+
+		[SerializeField]
+		private UIWFTabPanel panel;
+
+		[SerializeField]
+		private HighlightSelector.Data[] datas;
+
+		public Action<HighlightSelector.SelectItem> onChangeSelectItem;
+
+		public enum SelectItem
+		{
+			Eye,
+			EyeR,
+			EyeL
+		}
+
+		[Serializable]
+		private struct Data
+		{
+			public MPN[] mpns
+			{
+				get
+				{
+					MPN[] result;
+					if (this.type == HighlightSelector.SelectItem.Eye)
+					{
+						MPN[] array = new MPN[2];
+						array[0] = MPN.eye_hi;
+						result = array;
+						array[1] = MPN.eye_hi_r;
+					}
+					else if (this.type == HighlightSelector.SelectItem.EyeR)
+					{
+						(result = new MPN[1])[0] = MPN.eye_hi_r;
+					}
+					else
+					{
+						(result = new MPN[1])[0] = MPN.eye_hi;
+					}
+					return result;
+				}
+			}
+
+			[SerializeField]
+			public HighlightSelector.SelectItem type;
+
+			[SerializeField]
+			public UIWFTabButton button;
+		}
+	}
+}

+ 38 - 11
Assembly-CSharp/CharacterMgr.cs

@@ -624,6 +624,8 @@ public class CharacterMgr : MonoBehaviour
 			Maid maid = this.m_listStockMaid[i];
 			maid.SetPos(Vector3.zero);
 			maid.SetRot(Vector3.zero);
+			maid.baseOffset = (maid.baseEulerAngles = Vector3.zero);
+			maid.rotateLinkMaid = string.Empty;
 			maid.SetPosOffset(Vector3.zero);
 			if (maid.body0 != null)
 			{
@@ -635,6 +637,8 @@ public class CharacterMgr : MonoBehaviour
 			Maid maid2 = this.m_listStockNpcMaid[j];
 			maid2.SetPos(Vector3.zero);
 			maid2.SetRot(Vector3.zero);
+			maid2.baseOffset = (maid2.baseEulerAngles = Vector3.zero);
+			maid2.rotateLinkMaid = string.Empty;
 			maid2.SetPosOffset(Vector3.zero);
 			if (maid2.body0 != null)
 			{
@@ -646,6 +650,8 @@ public class CharacterMgr : MonoBehaviour
 			Maid maid3 = this.m_listStockMan[k];
 			maid3.SetPos(Vector3.zero);
 			maid3.SetRot(Vector3.zero);
+			maid3.baseOffset = (maid3.baseEulerAngles = Vector3.zero);
+			maid3.rotateLinkMaid = string.Empty;
 			maid3.SetPosOffset(Vector3.zero);
 			if (maid3.body0 != null)
 			{
@@ -657,6 +663,8 @@ public class CharacterMgr : MonoBehaviour
 			Maid maid4 = this.m_listStockNpcMan[l];
 			maid4.SetPos(Vector3.zero);
 			maid4.SetRot(Vector3.zero);
+			maid4.baseOffset = (maid4.baseEulerAngles = Vector3.zero);
+			maid4.rotateLinkMaid = string.Empty;
 			maid4.SetPosOffset(Vector3.zero);
 			if (maid4.body0 != null)
 			{
@@ -910,7 +918,15 @@ public class CharacterMgr : MonoBehaviour
 		Vector3 zero = Vector3.zero;
 		Vector3 zero2 = Vector3.zero;
 		this.GetOffsetMaid(f_maid, f_nCSTSplitNum, out zero, out zero2, f_cIn);
-		f_maid.SetPos(zero);
+		if (ScriptManager.isGP001Mode)
+		{
+			f_maid.motionOffset = zero;
+			f_maid.UpdateTransformData();
+		}
+		else
+		{
+			f_maid.SetPos(zero);
+		}
 		return zero2;
 	}
 
@@ -926,16 +942,27 @@ public class CharacterMgr : MonoBehaviour
 				vector2 = vector;
 			}
 		}
-		this.m_goAllOffset.transform.localPosition = new Vector3(0f, vector2.y, 0f);
+		if (!ScriptManager.isGP001Mode)
+		{
+			this.CharaAllOfsetPos(new Vector3(0f, vector2.y, 0f));
+		}
 	}
 
 	public void SetManOffsetPos(Maid f_manMy, Maid f_maidTarget, int f_nCSTSplitNum, bool f_bPenisDetailMode, CharacterMgr.CharaPer f_cIn, CharacterMgr.PenisPer f_cPenisPer)
 	{
 		Vector3 vecChinkoOffset;
-		Vector3 pos;
-		this.GetOffsetMan(f_maidTarget, f_nCSTSplitNum, f_bPenisDetailMode, out vecChinkoOffset, out pos, f_cIn, f_cPenisPer);
+		Vector3 vector;
+		this.GetOffsetMan(f_maidTarget, f_nCSTSplitNum, f_bPenisDetailMode, out vecChinkoOffset, out vector, f_cIn, f_cPenisPer);
 		f_manMy.body0.vecChinkoOffset = vecChinkoOffset;
-		f_manMy.SetPos(pos);
+		if (ScriptManager.isGP001Mode)
+		{
+			f_manMy.motionOffset = vector;
+			f_manMy.UpdateTransformData();
+		}
+		else
+		{
+			f_manMy.SetPos(vector);
+		}
 	}
 
 	public Texture2D ThumShot(Maid f_maid)
@@ -949,7 +976,7 @@ public class CharacterMgr : MonoBehaviour
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		string result = string.Empty;
 		binaryWriter.Write("CM3D2_PRESET_S");
-		binaryWriter.Write(1210);
+		binaryWriter.Write(1230);
 		binaryWriter.Write((char)presset_type);
 		maid.SerializePropLowCapacity(binaryWriter);
 		maid.SerializeMultiColor(binaryWriter);
@@ -966,7 +993,7 @@ public class CharacterMgr : MonoBehaviour
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_PRESET");
-		binaryWriter.Write(1210);
+		binaryWriter.Write(1230);
 		binaryWriter.Write((int)f_type);
 		if (texture2D != null)
 		{
@@ -1171,19 +1198,19 @@ public class CharacterMgr : MonoBehaviour
 		if (f_prest.ePreType == CharacterMgr.PresetType.Body)
 		{
 			array = (from mp in f_prest.listMprop
-			where (1 <= mp.idx && mp.idx <= 52) || (87 <= mp.idx && mp.idx <= 90)
+			where (1 <= mp.idx && mp.idx <= 66) || (101 <= mp.idx && mp.idx <= 105)
 			select mp).ToArray<MaidProp>();
 		}
 		else if (f_prest.ePreType == CharacterMgr.PresetType.Wear)
 		{
 			array = (from mp in f_prest.listMprop
-			where 53 <= mp.idx && mp.idx <= 82
+			where 67 <= mp.idx && mp.idx <= 96
 			select mp).ToArray<MaidProp>();
 		}
 		else
 		{
 			array = (from mp in f_prest.listMprop
-			where (1 <= mp.idx && mp.idx <= 82) || (87 <= mp.idx && mp.idx <= 90)
+			where (1 <= mp.idx && mp.idx <= 96) || (101 <= mp.idx && mp.idx <= 105)
 			select mp).ToArray<MaidProp>();
 		}
 		NDebug.Assert(array != null, "プリセットを実行する配列が空です。");
@@ -1246,7 +1273,7 @@ public class CharacterMgr : MonoBehaviour
 	public bool Serialize(BinaryWriter bwWrite)
 	{
 		bwWrite.Write("CM3D2_CHR_MGR");
-		bwWrite.Write(1210);
+		bwWrite.Write(1230);
 		this.m_PlayerStatus.Serialize(bwWrite);
 		bwWrite.Write(this.m_listStockMan.Count);
 		for (int i = 0; i < this.m_listStockMan.Count; i++)

+ 63 - 26
Assembly-CSharp/CharacterSelectMain.cs

@@ -104,7 +104,7 @@ public class CharacterSelectMain : WfScreenChildren
 		}
 		else if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Yotogi || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.NewYotogi || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.NewYotogiAdditional || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Vip || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Facility)
 		{
-			if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Yotogi || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.NewYotogi || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Vip)
+			if (this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Yotogi || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.NewYotogi || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.NewYotogiAdditional || this.scene_chara_select_.select_type == SceneCharacterSelect.SelectType.Vip)
 			{
 				if (!CharacterSelectMain.compatibilityMode)
 				{
@@ -166,7 +166,7 @@ public class CharacterSelectMain : WfScreenChildren
 					}
 					else
 					{
-						explanatoryLabel = "夜伽を行うメイドを選択してください。";
+						explanatoryLabel = "GP01夜伽を行うメイドを選択してください。";
 					}
 				}
 				else
@@ -461,9 +461,13 @@ public class CharacterSelectMain : WfScreenChildren
 				this.chara_select_mgr_.SelectAllMaid();
 				this.auto_select_ = true;
 			}
+			if (!this.auto_select_)
+			{
+				GameMain.Instance.SoundMgr.PlayBGM("BGM015.ogg", 0.5f, true);
+			}
 			this.button_dic_["全選択"].gameObject.SetActive(false);
 			this.button_dic_["全解除"].gameObject.SetActive(false);
-			this.SetExplanatoryLabel("※まだ作っている途中です※");
+			this.SetExplanatoryLabel("ライフモードに登場するメイドを選択してください");
 		}
 		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
 		for (int m = 0; m < characterMgr.GetStockMaidCount(); m++)
@@ -593,7 +597,6 @@ public class CharacterSelectMain : WfScreenChildren
 
 	private void OnMultiSelectCharaLifeMode(Maid[] maidArray)
 	{
-		this.UpdateSelectedMaidPanelOfLifeMode(maidArray);
 		this.loaded_check_maid_.Clear();
 		foreach (Maid maid in maidArray)
 		{
@@ -602,6 +605,7 @@ public class CharacterSelectMain : WfScreenChildren
 				this.loaded_check_maid_.Add(maid);
 			}
 		}
+		this.UpdateSelectedMaidPanelOfLifeMode(maidArray);
 		this.button_dic_["OK"].isEnabled = (this.loaded_check_maid_.Count > 0);
 	}
 
@@ -803,20 +807,32 @@ public class CharacterSelectMain : WfScreenChildren
 		GameObject gameObject = Utility.CreatePrefab(this.m_SelectedMaidPanelGrid.gameObject, "CharacterSelect/Prefab/MaidPlateSimple", true);
 		gameObject.SetActive(false);
 		this.m_SelectedMaidPanelListViewer.tempItem = gameObject;
-		this.m_SelectedMaidPanelListViewer.Show<MaidPlate>(20, delegate(int index, MaidPlate maidPlate)
+		this.m_SelectedMaidPanelListViewer.Show<MaidPlate>(21, delegate(int index, MaidPlate maidPlate)
 		{
-			maidPlate.gameObject.SetActive(false);
+			if (EmpireLifeModeAPI.GetMaxMaidCount() <= index)
+			{
+				maidPlate.gameObject.SetActive(false);
+			}
+			else
+			{
+				maidPlate.gameObject.SetActive(true);
+			}
+			maidPlate.SetEmpty();
 			UIButton uibutton = UTY.GetChildObject(maidPlate.gameObject, "Button", false).AddComponent<UIButton>();
 			EventDelegate.Add(uibutton.onClick, delegate()
 			{
 				if (maidPlate.maid != null)
 				{
+					this.chara_select_mgr_.MoveGridArea(maidPlate.maid);
 					this.chara_select_mgr_.SetSelectStateMaid(maidPlate.maid, false);
 				}
 			});
+			maidPlate.GetComponentInChildren<Collider>().enabled = false;
+			maidPlate.GetComponentInChildren<UIButton>().defaultColor = new Color(0f, 0f, 0f, 0.5f);
+			maidPlate.GetComponentInChildren<UIPlayAnimation>().enabled = false;
 		});
 		EventDelegate.Add(this.m_SelectedMaidPanelButtonAutoSelect.onClick, new EventDelegate.Callback(this.OnClickButtonMaidAutoSelect));
-		EventDelegate.Add(this.m_SelectedMaidPanelButtonAllRelease.onClick, new EventDelegate.Callback(this.chara_select_mgr_.SelectAllReleaseMaid));
+		EventDelegate.Add(this.m_SelectedMaidPanelButtonAllRelease.onClick, new EventDelegate.Callback(this.OnClickButtonMaidAllRelease));
 	}
 
 	private void UpdateSelectedMaidPanelOfLifeMode(Maid[] nowMaidSelectState)
@@ -827,30 +843,27 @@ public class CharacterSelectMain : WfScreenChildren
 		{
 			GameObject gameObject = this.m_SelectedMaidPanelListViewer.ItemArray[num];
 			MaidPlate component = gameObject.GetComponent<MaidPlate>();
+			UIButton componentInChildren = gameObject.GetComponentInChildren<UIButton>();
 			Maid maid = nowMaidSelectState[num];
+			component.GetComponentInChildren<Collider>().enabled = (maid != null);
+			componentInChildren.defaultColor = ((!(maid != null)) ? new Color(0f, 0f, 0f, 0.5f) : new Color(0f, 0f, 0f, 0f));
 			if (maid == null)
 			{
-				if (gameObject.activeSelf)
-				{
-					gameObject.SetActive(false);
-				}
-				component.SetMaidData(null);
+				component.SetEmpty();
+				component.transform.SetAsLastSibling();
 				flag = true;
 			}
-			else
+			if (!gameObject.activeSelf)
 			{
-				if (!gameObject.activeSelf)
-				{
-					gameObject.SetActive(true);
-					component.transform.SetAsLastSibling();
-					flag = true;
-				}
-				if (maid != component.maid)
-				{
-					component.SetMaidData(maid);
-					component.transform.SetAsLastSibling();
-					flag = true;
-				}
+				gameObject.SetActive(true);
+				component.transform.SetAsLastSibling();
+				flag = true;
+			}
+			if (maid != component.maid)
+			{
+				component.SetMaidData(maid);
+				component.transform.SetAsLastSibling();
+				flag = true;
 			}
 			num++;
 		}
@@ -858,6 +871,21 @@ public class CharacterSelectMain : WfScreenChildren
 		{
 			this.m_SelectedMaidPanelGrid.Reposition();
 		}
+		foreach (Transform transform in this.chara_select_mgr_.MaidPlateParentGrid.GetChildList())
+		{
+			MaidPlate component2 = transform.GetComponent<MaidPlate>();
+			if (component2.maid != null && this.loaded_check_maid_.Contains(component2.maid))
+			{
+				this.chara_select_mgr_.MoveNoDrawArea(component2.maid);
+			}
+		}
+		foreach (MaidPlate maidPlate in this.chara_select_mgr_.NoDrawArea.GetComponentsInChildren<MaidPlate>())
+		{
+			if (maidPlate.maid != null && !this.loaded_check_maid_.Contains(maidPlate.maid))
+			{
+				this.chara_select_mgr_.MoveGridArea(maidPlate.maid);
+			}
+		}
 	}
 
 	private void OnClickButtonMaidAutoSelect()
@@ -890,7 +918,7 @@ public class CharacterSelectMain : WfScreenChildren
 			}
 		}
 		foreach (MaidPlate maidPlate in from maid in list2
-		orderby UnityEngine.Random.Range(0, 2)
+		orderby UnityEngine.Random.Range(0, 10)
 		select maid)
 		{
 			if (num-- <= 0)
@@ -901,6 +929,15 @@ public class CharacterSelectMain : WfScreenChildren
 		}
 	}
 
+	private void OnClickButtonMaidAllRelease()
+	{
+		foreach (MaidPlate maidPlate in this.chara_select_mgr_.NoDrawArea.GetComponentsInChildren<MaidPlate>())
+		{
+			this.chara_select_mgr_.MoveGridArea(maidPlate.maid);
+		}
+		this.chara_select_mgr_.SelectAllReleaseMaid();
+	}
+
 	private SceneCharacterSelect scene_chara_select_;
 
 	private Maid select_maid_;

+ 11 - 0
Assembly-CSharp/ClassChangePanel.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using I2.Loc;
 using MaidStatus;
 using MaidStatus.CsvData;
 using UnityEngine;
@@ -222,7 +223,17 @@ public class ClassChangePanel : MonoBehaviour
 		JobClass.Data data = JobClass.GetData(maid_class_type);
 		ClassData<JobClass.Data> classData = this.maid_.status.jobClass.Get(maid_class_type);
 		this.info_panel_item_.class_name.text = data.drawName;
+		Localize component = this.info_panel_item_.class_name.GetComponent<Localize>();
+		if (component != null && GameUty.supportMultiLanguage)
+		{
+			component.SetTerm(data.termName);
+		}
 		this.info_panel_item_.info_text.text = data.explanatoryText;
+		component = this.info_panel_item_.info_text.GetComponent<Localize>();
+		if (component != null && GameUty.supportMultiLanguage)
+		{
+			component.SetTerm(data.termExplanatoryText);
+		}
 		if (classData != null)
 		{
 			this.info_panel_item_.class_level.text = classData.level.ToString();

+ 8 - 1
Assembly-CSharp/ClassUnit.cs

@@ -1,4 +1,5 @@
 using System;
+using I2.Loc;
 using MaidStatus;
 using UnityEngine;
 
@@ -57,8 +58,14 @@ public class ClassUnit : MonoBehaviour
 	{
 		this.yotogi_class_type_ = int.MinValue;
 		this.job_class_type_ = class_type;
-		this.class_name_.text = JobClass.GetData(class_type).drawName;
+		JobClass.Data data = JobClass.GetData(class_type);
+		this.class_name_.text = data.drawName;
 		this.class_level_.text = "0";
+		Localize component = this.class_name_.GetComponent<Localize>();
+		if (component != null && GameUty.supportMultiLanguage)
+		{
+			component.SetTerm(data.termName);
+		}
 	}
 
 	public void SetYotogiClassType(int class_type)

+ 251 - 0
Assembly-CSharp/ConfigVRCtrl.cs

@@ -243,6 +243,29 @@ public class ConfigVRCtrl : NGUIWindow
 			this.cmSystem.SConfig.OvrTabletFrameHideWhenMsgWndVisible = isLeft;
 			this.Log("Vive\u3000メッセージ中タブレット枠を非表示 : " + this.cmSystem.SConfig.OvrTabletFrameHideWhenMsgWndVisible);
 		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.ViveHandCollisionToHair, this.SetupButton(parentItem, "vive hand collision to hair", delegate(bool isLeft)
+		{
+			this.cmSystem.SConfig.OvrHandHitToHair = isLeft;
+			this.Log("Vive\u3000手の髪への当たり判定 : " + this.cmSystem.SConfig.OvrHandHitToHair);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.ViveHandCollisionToSkirt, this.SetupMultiButton(parentItem, "vive hand collision to skirt", delegate(int index)
+		{
+			CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT ovrHandHitToSkirt;
+			if (index == 0)
+			{
+				ovrHandHitToSkirt = CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.OFF;
+			}
+			else if (index == 1)
+			{
+				ovrHandHitToSkirt = CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.ON;
+			}
+			else
+			{
+				ovrHandHitToSkirt = CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.GRAB;
+			}
+			this.cmSystem.SConfig.OvrHandHitToSkirt = ovrHandHitToSkirt;
+			this.Log("Vive\u3000手のスカートへの当たり判定 : " + this.cmSystem.SConfig.OvrHandHitToSkirt);
+		}));
 	}
 
 	private void SetupOculusTouchUI(GameObject parentItem)
@@ -296,6 +319,29 @@ public class ConfigVRCtrl : NGUIWindow
 			this.cmSystem.SConfig.OvrTabletFrameHideWhenMsgWndVisible = isLeft;
 			this.Log("Touch\u3000メッセージ中タブレット枠を非表示 : " + this.cmSystem.SConfig.OvrTabletFrameHideWhenMsgWndVisible);
 		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.TouchHandCollisionToHair, this.SetupButton(parentItem, "touch hand collision to hair", delegate(bool isLeft)
+		{
+			this.cmSystem.SConfig.OvrHandHitToHair = isLeft;
+			this.Log("Touch\u3000手の髪への当たり判定 : " + this.cmSystem.SConfig.OvrHandHitToHair);
+		}));
+		this.dicItem.Add(ConfigVRCtrl.TypeItem.TouchHandCollisionToSkirt, this.SetupMultiButton(parentItem, "touch hand collision to skirt", delegate(int index)
+		{
+			CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT ovrHandHitToSkirt;
+			if (index == 0)
+			{
+				ovrHandHitToSkirt = CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.OFF;
+			}
+			else if (index == 1)
+			{
+				ovrHandHitToSkirt = CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.ON;
+			}
+			else
+			{
+				ovrHandHitToSkirt = CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.GRAB;
+			}
+			this.cmSystem.SConfig.OvrHandHitToSkirt = ovrHandHitToSkirt;
+			this.Log("Touch\u3000手のスカートへの当たり判定 : " + this.cmSystem.SConfig.OvrHandHitToSkirt);
+		}));
 	}
 
 	private void SetupHMDOnlyUI(GameObject parentItem)
@@ -379,6 +425,14 @@ public class ConfigVRCtrl : NGUIWindow
 		return parentButton;
 	}
 
+	private ConfigVRCtrl.ParentMultiButton SetupMultiButton(GameObject parent, string objName, Action<int> onClickButtonIndex)
+	{
+		ConfigVRCtrl.ParentMultiButton parentMultiButton = UTY.GetChildObject(parent, objName, false).AddComponent<ConfigVRCtrl.ParentMultiButton>();
+		ConfigVRCtrl.ParentMultiButton parentMultiButton2 = parentMultiButton;
+		parentMultiButton2.onClick = (Action<int>)Delegate.Combine(parentMultiButton2.onClick, onClickButtonIndex);
+		return parentMultiButton;
+	}
+
 	private void ItemSwitchingOfDevice()
 	{
 		if (this.dicItem == null)
@@ -429,6 +483,8 @@ public class ConfigVRCtrl : NGUIWindow
 			dictionary[ConfigVRCtrl.TypeItem.ViveOldMoveRotatePadAriaRate] = (this.cmSystem.SConfig.OvrMoveType == CMSystem.SerializeConfig.OVR_MOVE_TYPE.DIRECTION);
 			dictionary[ConfigVRCtrl.TypeItem.ViveDDTouchToClick] = false;
 			dictionary[ConfigVRCtrl.TypeItem.ViveOvrTabletFrameHideWhenMsgWndVisible] = true;
+			dictionary[ConfigVRCtrl.TypeItem.ViveHandCollisionToHair] = true;
+			dictionary[ConfigVRCtrl.TypeItem.ViveHandCollisionToSkirt] = true;
 		}
 		else if (vrdeviceTypeID == GameMain.VRDeviceType.RIFT_TOUCH)
 		{
@@ -439,6 +495,8 @@ public class ConfigVRCtrl : NGUIWindow
 			dictionary[ConfigVRCtrl.TypeItem.TouchOldMoveStick] = (this.cmSystem.SConfig.OvrMoveType == CMSystem.SerializeConfig.OVR_MOVE_TYPE.DIRECTION);
 			dictionary[ConfigVRCtrl.TypeItem.TouchDDTouchToClick] = false;
 			dictionary[ConfigVRCtrl.TypeItem.TouchOvrTabletFrameHideWhenMsgWndVisible] = true;
+			dictionary[ConfigVRCtrl.TypeItem.TouchHandCollisionToHair] = true;
+			dictionary[ConfigVRCtrl.TypeItem.TouchHandCollisionToSkirt] = true;
 		}
 		dictionary[ConfigVRCtrl.TypeItem.DummyShowMan] = false;
 		foreach (KeyValuePair<ConfigVRCtrl.TypeItem, bool> keyValuePair in dictionary)
@@ -518,6 +576,23 @@ public class ConfigVRCtrl : NGUIWindow
 			case ConfigVRCtrl.TypeItem.ViveOvrTabletFrameHideWhenMsgWndVisible:
 				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrTabletFrameHideWhenMsgWndVisible);
 				break;
+			case ConfigVRCtrl.TypeItem.ViveHandCollisionToHair:
+				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrHandHitToHair);
+				break;
+			case ConfigVRCtrl.TypeItem.ViveHandCollisionToSkirt:
+				if (this.cmSystem.SConfig.OvrHandHitToSkirt == CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.OFF)
+				{
+					keyValuePair.Value.Set(0);
+				}
+				else if (this.cmSystem.SConfig.OvrHandHitToSkirt == CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.ON)
+				{
+					keyValuePair.Value.Set(1);
+				}
+				else
+				{
+					keyValuePair.Value.Set(2);
+				}
+				break;
 			case ConfigVRCtrl.TypeItem.TouchSnapRotateEnable:
 				keyValuePair.Value.Set(this.cmSystem.OvrUseSnapRotate);
 				break;
@@ -539,6 +614,23 @@ public class ConfigVRCtrl : NGUIWindow
 			case ConfigVRCtrl.TypeItem.TouchOvrTabletFrameHideWhenMsgWndVisible:
 				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrTabletFrameHideWhenMsgWndVisible);
 				break;
+			case ConfigVRCtrl.TypeItem.TouchHandCollisionToHair:
+				keyValuePair.Value.Set(this.cmSystem.SConfig.OvrHandHitToHair);
+				break;
+			case ConfigVRCtrl.TypeItem.TouchHandCollisionToSkirt:
+				if (this.cmSystem.SConfig.OvrHandHitToSkirt == CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.OFF)
+				{
+					keyValuePair.Value.Set(0);
+				}
+				else if (this.cmSystem.SConfig.OvrHandHitToSkirt == CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.ON)
+				{
+					keyValuePair.Value.Set(1);
+				}
+				else
+				{
+					keyValuePair.Value.Set(2);
+				}
+				break;
 			case ConfigVRCtrl.TypeItem.HMDOnlyCameraPlaneMovement:
 				keyValuePair.Value.Set(this.cmSystem.VRCameraPlaneMove);
 				break;
@@ -858,6 +950,161 @@ public class ConfigVRCtrl : NGUIWindow
 		private UIButton m_ButtonLeft;
 	}
 
+	private class ParentMultiButton : ConfigVRCtrl.ParentItem
+	{
+		public UIButton buttonRight
+		{
+			get
+			{
+				return this.m_ButtonRight;
+			}
+			private set
+			{
+				this.m_ButtonRight = value;
+			}
+		}
+
+		public UIButton buttonLeft
+		{
+			get
+			{
+				return this.m_ButtonLeft;
+			}
+			private set
+			{
+				this.m_ButtonLeft = value;
+			}
+		}
+
+		public UIButton buttonCenter
+		{
+			get
+			{
+				return this.m_ButtonCenter;
+			}
+			private set
+			{
+				this.m_ButtonCenter = value;
+			}
+		}
+
+		public Action<int> onClick { get; set; }
+
+		protected override void Awake()
+		{
+			base.Awake();
+			GameObject childObject = UTY.GetChildObject(base.gameObject, "button right", false);
+			this.buttonRight = childObject.GetComponent<UIButton>();
+			if (this.buttonRight == null)
+			{
+				string message = string.Concat(new string[]
+				{
+					"[ConfigVRCtrl] ",
+					base.gameObject.name,
+					"/",
+					childObject.name,
+					"に、\nUIButton のコンポーネントがありませんでした"
+				});
+				NDebug.Assert(message, false);
+				Debug.LogError(message);
+			}
+			childObject = UTY.GetChildObject(base.gameObject, "button left", false);
+			this.buttonLeft = childObject.GetComponent<UIButton>();
+			if (this.buttonLeft == null)
+			{
+				string message2 = string.Concat(new string[]
+				{
+					"[ConfigVRCtrl] ",
+					base.gameObject.name,
+					"/",
+					childObject.name,
+					"に、\nUIButton のコンポーネントがありませんでした"
+				});
+				NDebug.Assert(message2, false);
+				Debug.LogError(message2);
+			}
+			childObject = UTY.GetChildObject(base.gameObject, "button center", false);
+			this.buttonCenter = childObject.GetComponent<UIButton>();
+			if (this.buttonCenter == null)
+			{
+				string message3 = string.Concat(new string[]
+				{
+					"[ConfigVRCtrl] ",
+					base.gameObject.name,
+					"/",
+					childObject.name,
+					"に、\nUIButton のコンポーネントがありませんでした"
+				});
+				NDebug.Assert(message3, false);
+				Debug.LogError(message3);
+			}
+			EventDelegate.Add(this.buttonRight.onClick, delegate()
+			{
+				if (this.onClick != null)
+				{
+					this.onClick(0);
+				}
+				this.OnClickButton(0);
+			});
+			EventDelegate.Add(this.buttonLeft.onClick, delegate()
+			{
+				if (this.onClick != null)
+				{
+					this.onClick(1);
+				}
+				this.OnClickButton(1);
+			});
+			EventDelegate.Add(this.buttonCenter.onClick, delegate()
+			{
+				if (this.onClick != null)
+				{
+					this.onClick(2);
+				}
+				this.OnClickButton(2);
+			});
+		}
+
+		private void OnClickButton(int index)
+		{
+			this.buttonRight.defaultColor = ((index != 0) ? ConfigVRCtrl.ParentMultiButton.ButtonDefaultColor : ConfigVRCtrl.ParentMultiButton.ButtonClickedColor);
+			this.buttonLeft.defaultColor = ((index != 1) ? ConfigVRCtrl.ParentMultiButton.ButtonDefaultColor : ConfigVRCtrl.ParentMultiButton.ButtonClickedColor);
+			this.buttonCenter.defaultColor = ((index != 2) ? ConfigVRCtrl.ParentMultiButton.ButtonDefaultColor : ConfigVRCtrl.ParentMultiButton.ButtonClickedColor);
+		}
+
+		public void Emulate(int index)
+		{
+			UIButton uibutton;
+			if (index == 0)
+			{
+				uibutton = this.buttonRight;
+			}
+			else if (index == 1)
+			{
+				uibutton = this.buttonLeft;
+			}
+			else
+			{
+				uibutton = this.buttonCenter;
+			}
+			EventDelegate.Execute(uibutton.onClick);
+		}
+
+		public override void Set(object value)
+		{
+			this.Emulate((int)value);
+		}
+
+		private static Color ButtonDefaultColor = new Color(1f, 1f, 1f, 0.5f);
+
+		private static Color ButtonClickedColor = Color.white;
+
+		private UIButton m_ButtonRight;
+
+		private UIButton m_ButtonLeft;
+
+		private UIButton m_ButtonCenter;
+	}
+
 	private enum TypeItem
 	{
 		CommonEyeHeight,
@@ -874,6 +1121,8 @@ public class ConfigVRCtrl : NGUIWindow
 		ViveOldMoveRotatePadAriaRate,
 		ViveDDTouchToClick,
 		ViveOvrTabletFrameHideWhenMsgWndVisible,
+		ViveHandCollisionToHair,
+		ViveHandCollisionToSkirt,
 		TouchSnapRotateEnable,
 		TouchSnapRotateRate,
 		TouchMoveMode,
@@ -881,6 +1130,8 @@ public class ConfigVRCtrl : NGUIWindow
 		TouchOldMoveStick,
 		TouchDDTouchToClick,
 		TouchOvrTabletFrameHideWhenMsgWndVisible,
+		TouchHandCollisionToHair,
+		TouchHandCollisionToSkirt,
 		HMDOnlyCameraPlaneMovement,
 		HMDOnlyMouseRotateEnable,
 		HMDOnlyMouseRotateSpeed,

+ 2 - 2
Assembly-CSharp/ControllerShortcutSettingData.cs

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

+ 11 - 6
Assembly-CSharp/CreateBGObjectSubWindow.cs

@@ -13,20 +13,25 @@ public class CreateBGObjectSubWindow : BasePhotoSubWindow
 		{
 			return;
 		}
-		Dictionary<string, List<KeyValuePair<string, object>>> dictionary = new Dictionary<string, List<KeyValuePair<string, object>>>();
+		Dictionary<string, List<string>> dictionary = new Dictionary<string, List<string>>();
+		Dictionary<string, List<KeyValuePair<string, object>>> dictionary2 = new Dictionary<string, List<KeyValuePair<string, object>>>();
 		foreach (KeyValuePair<string, List<PhotoBGObjectData>> keyValuePair in PhotoBGObjectData.category_list)
 		{
-			if (!dictionary.ContainsKey(keyValuePair.Key))
+			if (!dictionary2.ContainsKey(keyValuePair.Key))
 			{
-				dictionary.Add(keyValuePair.Key, new List<KeyValuePair<string, object>>());
+				dictionary2.Add(keyValuePair.Key, new List<KeyValuePair<string, object>>());
+				dictionary.Add(keyValuePair.Key, new List<string>());
 			}
 			for (int i = 0; i < keyValuePair.Value.Count; i++)
 			{
-				dictionary[keyValuePair.Key].Add(new KeyValuePair<string, object>(keyValuePair.Value[i].name, keyValuePair.Value[i]));
+				dictionary2[keyValuePair.Key].Add(new KeyValuePair<string, object>(keyValuePair.Value[i].name, keyValuePair.Value[i]));
+				dictionary[keyValuePair.Key].Add(keyValuePair.Value[i].termName);
 			}
 		}
-		this.addButtonList.SetData(dictionary, false);
+		this.addButtonList.SetData(dictionary2, dictionary, false);
 		this.addButtonList.onClickEventList.Add(new Action<object>(this.OnClickItem));
+		this.addButtonList.PopUpList.PopupList.isLocalized = GameUty.supportMultiLanguage;
+		this.addButtonList.PopUpList.PopupList.itemTerms = ((!GameUty.supportMultiLanguage) ? null : PhotoBGObjectData.popup_category_term_list);
 		this.addButtonList.popup_value_list = PhotoBGObjectData.popup_category_list;
 	}
 
@@ -114,7 +119,7 @@ public class CreateBGObjectSubWindow : BasePhotoSubWindow
 		this.create_obj_list_.Add(bgObject);
 		this.create_obj_list_.Sort();
 		ObjectManagerWindow objectManagerWindow = this.mgr.GetWindow(PhotoWindowManager.WindowType.ObjectManager) as ObjectManagerWindow;
-		objectManagerWindow.AddTransTargetObject(bgObject.game_object, bgObject.data.name, PhotoTransTargetObject.Type.Prefab);
+		objectManagerWindow.AddTransTargetObject(bgObject.game_object, bgObject.data.name, bgObject.data.termName, PhotoTransTargetObject.Type.Prefab);
 		return bgObject;
 	}
 

+ 10 - 1
Assembly-CSharp/DanceData.cs

@@ -3,6 +3,14 @@ using System.Collections.Generic;
 
 public class DanceData
 {
+	public string titleTerm
+	{
+		get
+		{
+			return "SceneDanceSelect/曲名/" + this.ID.ToString();
+		}
+	}
+
 	public void Recet()
 	{
 		this.IsPlayable = this.InitialPlayable;
@@ -53,7 +61,8 @@ public class DanceData
 	public enum BgType
 	{
 		LiveStage,
-		Theater
+		Theater,
+		PoleDance
 	}
 
 	public enum DanceTerm

+ 26 - 14
Assembly-CSharp/DanceSelect.cs

@@ -127,7 +127,15 @@ public class DanceSelect : WfScreenChildren
 									danceData.maid_order.Add(int.Parse(s) - 1);
 								}
 							}
-							danceData.bgType = ((!(csvParser.GetCellAsString(num++, j) == "ライブステージ")) ? DanceData.BgType.Theater : DanceData.BgType.LiveStage);
+							string cellAsString5 = csvParser.GetCellAsString(num++, j);
+							if (cellAsString5 == "ライブステージ")
+							{
+								danceData.bgType = DanceData.BgType.LiveStage;
+							}
+							else
+							{
+								danceData.bgType = ((!(cellAsString5 == "劇場")) ? DanceData.BgType.PoleDance : DanceData.BgType.Theater);
+							}
 							danceData.InitialPlayable = csvParser.IsCellToExistData(num++, j);
 							danceData.IsPlayable = danceData.InitialPlayable;
 							danceData.RhythmGameCorrespond = (csvParser.GetCellAsString(num++, j) == "◯");
@@ -229,18 +237,21 @@ public class DanceSelect : WfScreenChildren
 		{
 			NDebug.AssertNull(this.select_panelset_array_[i].ContentsPanel != null && this.select_panelset_array_[i].ParentPanel != null);
 		}
-		this.m_CharaSelectLabel = UTY.GetChildObject(this.CharaSelectPanel.ParentPanel.gameObject, "ExplanatoryText/Value", false).GetComponent<UILabel>();
-		Localize component3 = this.m_CharaSelectLabel.GetComponent<Localize>();
-		if (component3 != null)
+		if (!GameUty.supportMultiLanguage)
 		{
-			NGUILabelSpacingHold component4 = component3.gameObject.GetComponent<NGUILabelSpacingHold>();
-			if (component4 != null)
+			this.m_CharaSelectLabel = UTY.GetChildObject(this.CharaSelectPanel.ParentPanel.gameObject, "ExplanatoryText/Value", false).GetComponent<UILabel>();
+			Localize component3 = this.m_CharaSelectLabel.GetComponent<Localize>();
+			if (component3 != null)
 			{
-				UnityEngine.Object.DestroyImmediate(component4);
+				NGUILabelLocalizeSupport component4 = component3.gameObject.GetComponent<NGUILabelLocalizeSupport>();
+				if (component4 != null)
+				{
+					UnityEngine.Object.DestroyImmediate(component4);
+				}
+				UnityEngine.Object.DestroyImmediate(component3);
 			}
-			UnityEngine.Object.DestroyImmediate(component3);
+			this.m_CharaSelectLabel.text = "ダンスを行うメイドを選択してください。";
 		}
-		this.m_CharaSelectLabel.text = "ダンスを行うメイドを選択してください。";
 		this.chara_select_mgr_ = this.CharaSelectPanel.ParentPanel.gameObject.GetComponentInChildren<CharacterSelectManager>();
 		NDebug.AssertNull(this.chara_select_mgr_ != null);
 	}
@@ -295,7 +306,7 @@ public class DanceSelect : WfScreenChildren
 			{
 				goto IL_20A;
 			}
-			IL_347:
+			IL_36F:
 			j++;
 			continue;
 			IL_20A:
@@ -303,6 +314,7 @@ public class DanceSelect : WfScreenChildren
 			UTY.GetChildObject(gameObject2, "title", false).GetComponent<UILabel>().fontSize = DanceSelect.dance_data_list_[j].title_font_size;
 			UTY.GetChildObject(gameObject2, "title", false).transform.localPosition = new Vector3(0f, (float)DanceSelect.dance_data_list_[j].title_offset_y, 0f);
 			UTY.GetChildObject(gameObject2, "title", false).GetComponent<UILabel>().text = DanceSelect.dance_data_list_[j].title;
+			UTY.GetChildObject(gameObject2, "title", false).GetComponent<Localize>().SetTerm(DanceSelect.dance_data_list_[j].titleTerm);
 			gameObject2.name = DanceSelect.dance_data_list_[j].title;
 			UIWFTabButton componentInChildren = gameObject2.GetComponentInChildren<UIWFTabButton>();
 			if (!uiwftabButton)
@@ -316,7 +328,7 @@ public class DanceSelect : WfScreenChildren
 			}
 			this.m_SongPlatelUIPair.Add(DanceSelect.dance_data_list_[j], componentInChildren);
 			EventDelegate.Add(componentInChildren.onSelect, new EventDelegate.Callback(this.OnSelectSong));
-			goto IL_347;
+			goto IL_36F;
 		}
 		gameObject.GetComponent<UIGrid>().repositionNow = true;
 		this.MusicSelectPanel.ContentsPanel.GetComponent<UIScrollView>().ResetPosition();
@@ -383,12 +395,12 @@ public class DanceSelect : WfScreenChildren
 			if (DanceSelect.ChallengeDay < GameMain.Instance.CharacterMgr.status.days)
 			{
 				List<DanceData> list = (from e in DanceSelect.dance_data_list_
-				where e.bgType == DanceData.BgType.Theater
+				where e.bgType == DanceData.BgType.Theater && e.RhythmGameCorrespond
 				select e).ToList<DanceData>();
 				if (!this.m_AllRelease)
 				{
 					list = (from e in list
-					where e.IsPlayable
+					where e.IsPlayable && e.RhythmGameCorrespond
 					select e).ToList<DanceData>();
 				}
 				int index = UnityEngine.Random.Range(0, list.Count);
@@ -653,7 +665,7 @@ public class DanceSelect : WfScreenChildren
 			{
 				DanceSelect.m_SelectedDance.Add(this.m_SecondDanceData);
 			}
-			if (RhythmAction_Mgr.NowDance == RhythmAction_Mgr.DanceType.Challenge || RhythmAction_Mgr.IsVSDance)
+			if (!GameUty.supportMultiLanguage && (RhythmAction_Mgr.NowDance == RhythmAction_Mgr.DanceType.Challenge || RhythmAction_Mgr.IsVSDance))
 			{
 				this.m_CharaSelectLabel.text = "ダンスを行うメイドを" + select_chara_num + "人選択してください。";
 			}

+ 15 - 0
Assembly-CSharp/DanceSelectMusicInfo.cs

@@ -1,4 +1,5 @@
 using System;
+using I2.Loc;
 using UnityEngine;
 
 public class DanceSelectMusicInfo
@@ -24,11 +25,25 @@ public class DanceSelectMusicInfo
 	public void SetDanceData(DanceData data)
 	{
 		this.title_label_.text = data.title.Replace("\n", string.Empty);
+		Localize component = this.title_label_.GetComponent<Localize>();
+		if (component != null)
+		{
+			component.SetTerm(data.titleTerm);
+		}
 		if (this.info_label_)
 		{
 			this.info_label_.text = data.commentary_text;
 		}
 		this.dance_num_label_.text = "ダンス人数 : " + data.select_chara_num + "人";
+		component = this.dance_num_label_.GetComponent<Localize>();
+		if (component != null)
+		{
+			component.TermArgs = new Localize.ArgsPair[]
+			{
+				Localize.ArgsPair.Create(data.select_chara_num.ToString())
+			};
+			component.OnLocalize(true);
+		}
 		this.Release();
 		string text = (RhythmAction_Mgr.NowDance != RhythmAction_Mgr.DanceType.Challenge) ? data.sample_image_name : data.danceshow_image;
 		Texture2D texture2D = Resources.Load<Texture2D>("SceneDanceSelect/Atlas/" + text);

+ 5 - 0
Assembly-CSharp/DanceSetting.cs

@@ -575,6 +575,11 @@ public class DanceSetting : MonoBehaviour
 		{
 			this.m_ModeLabel.text = "ダンスショー設定";
 		}
+		Localize component = this.m_ModeLabel.GetComponent<Localize>();
+		if (component != null)
+		{
+			component.SetTerm("SceneDanceSelect/" + this.m_ModeLabel.text);
+		}
 		int num = 0;
 		foreach (DanceSetting.UIInspectorSetting uiinspectorSetting in this.m_SettingList)
 		{

+ 6 - 0
Assembly-CSharp/DescScheduleWork.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using I2.Loc;
 using Schedule;
 using TextureBank;
 using UnityEngine;
@@ -114,6 +115,11 @@ public class DescScheduleWork : DescScheduleTraining
 	private void UpdateFacilityMiniPanel()
 	{
 		this.m_lFacilityTitleName.text = this.work_data.name;
+		Localize component = this.m_lFacilityTitleName.gameObject.GetComponent<Localize>();
+		if (component != null)
+		{
+			component.SetTerm("SceneFacilityManagement/施設名/" + this.work_data.name);
+		}
 		Sprite facilityThumbnail = FacilityDataTable.GetFacilityThumbnail(this.work_data.facility.ID, true);
 		if (facilityThumbnail != null)
 		{

+ 3 - 0
Assembly-CSharp/DescScheduleYotogi.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using I2.Loc;
 using Schedule;
 using UnityEngine;
 using wf;
@@ -70,6 +71,7 @@ public class DescScheduleYotogi : DescScheduleBase
 		ScheduleCSVData.Yotogi yotogi = (ScheduleCSVData.Yotogi)work_data;
 		base.Active(true);
 		this.explanation_label_.text = yotogi.information;
+		this.explanation_label_.GetComponent<Localize>().SetTerm("SceneDaily/スケジュール/説明/" + yotogi.name);
 		int num = 0;
 		for (int i = 0; i < this.condition_unit_label_.Count; i++)
 		{
@@ -77,6 +79,7 @@ public class DescScheduleYotogi : DescScheduleBase
 			{
 				this.condition_unit_label_[i].Key.SetActive(true);
 				this.condition_unit_label_[i].Value.text = yotogi.condInfo[i];
+				this.condition_unit_label_[i].Value.GetComponent<Localize>().SetTerm("SceneDaily/スケジュール/条件文/" + yotogi.condInfo[i]);
 				num++;
 			}
 			else

+ 12 - 6
Assembly-CSharp/DeskItemWindow.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using com.workman.cm3d2.scene.dailyEtc;
+using I2.Loc;
 using UnityEngine;
 using wf;
 
@@ -140,6 +141,11 @@ public class DeskItemWindow : BasePhotoWindow
 				gameObject.name = instansData.id.ToString();
 				UILabel componentInChildren = gameObject.GetComponentInChildren<UILabel>();
 				componentInChildren.text = name;
+				Localize component = componentInChildren.GetComponent<Localize>();
+				if (component != null)
+				{
+					component.SetTerm("SceneDeskCustomize/" + name);
+				}
 				int j = componentInChildren.width;
 				componentInChildren.width = 0;
 				componentInChildren.MakePixelPerfect();
@@ -150,20 +156,20 @@ public class DeskItemWindow : BasePhotoWindow
 					componentInChildren.MakePixelPerfect();
 				}
 				componentInChildren.width = j;
-				UIWFTabButton component = gameObject.GetComponent<UIWFTabButton>();
-				component.onSelect.Clear();
-				EventDelegate.Add(component.onSelect, new EventDelegate.Callback(this.OnSelectItem));
+				UIWFTabButton component2 = gameObject.GetComponent<UIWFTabButton>();
+				component2.onSelect.Clear();
+				EventDelegate.Add(component2.onSelect, new EventDelegate.Callback(this.OnSelectItem));
 			}
 			else
 			{
 				transform.GetChild(i).gameObject.SetActive(false);
 			}
 		}
-		UIGrid component2 = this.PartsTabPabel.GetComponent<UIGrid>();
+		UIGrid component3 = this.PartsTabPabel.GetComponent<UIGrid>();
 		this.PartsTabPabel.UpdateChildren();
-		Utility.ResetNGUI(component2);
+		Utility.ResetNGUI(component3);
 		Utility.ResetNGUI(this.PartsScrollView);
-		this.PartsTabPabel.Select(component2.GetChild(0).GetComponentInChildren<UIWFTabButton>());
+		this.PartsTabPabel.Select(component3.GetChild(0).GetComponentInChildren<UIWFTabButton>());
 		if (this.category_dic_.Count <= 1)
 		{
 			this.PartsPopUpList.gameObject.SetActive(false);

+ 12 - 4
Assembly-CSharp/DeskManager.cs

@@ -143,7 +143,7 @@ internal class DeskManager
 	public static void SerializeSingleSaveData(BinaryWriter binary)
 	{
 		binary.Write("CM3D2_DeskCustomize");
-		binary.Write(1210);
+		binary.Write(1230);
 		binary.Write(DeskManager.item_inst_data_.Count);
 		for (int i = 0; i < DeskManager.item_inst_data_.Count; i++)
 		{
@@ -288,8 +288,8 @@ internal class DeskManager
 			this.asset_name = csv.GetCellAsString(num++, csv_y);
 			this.possession_flag = csv.GetCellAsString(num++, csv_y);
 			string cellAsString = csv.GetCellAsString(num++, csv_y);
-			this.seasonal = !string.IsNullOrEmpty(cellAsString);
-			if (this.seasonal)
+			this.seasonal_ = !string.IsNullOrEmpty(cellAsString);
+			if (this.seasonal_)
 			{
 				string[] array = cellAsString.Split(new char[]
 				{
@@ -313,6 +313,14 @@ internal class DeskManager
 			this.init_ui_rotation_scale = csv.GetCellAsReal(num++, csv_y);
 		}
 
+		public bool seasonal
+		{
+			get
+			{
+				return !GameUty.supportMultiLanguage && this.seasonal_;
+			}
+		}
+
 		public readonly int id;
 
 		public readonly string name;
@@ -323,7 +331,7 @@ internal class DeskManager
 
 		public readonly string asset_name;
 
-		public readonly bool seasonal;
+		private readonly bool seasonal_;
 
 		public readonly string possession_flag;
 

+ 57 - 11
Assembly-CSharp/DynamicBone.cs

@@ -30,7 +30,7 @@ public class DynamicBone : MonoBehaviour
 			return false;
 		};
 		f_bw.Write("CM3D21_PHY");
-		f_bw.Write(1210);
+		f_bw.Write(1230);
 		if (this.m_Root == null)
 		{
 			NDebug.MessageBox("エラー", "×物理ルートボーンが設定されていません。");
@@ -94,7 +94,7 @@ public class DynamicBone : MonoBehaviour
 	public bool SerializeWriteCollider(BinaryWriter f_bw, string f_strFileName)
 	{
 		f_bw.Write("CM3D21_COL");
-		f_bw.Write(1210);
+		f_bw.Write(1230);
 		if (this.m_Colliders == null || this.m_Colliders.Count == 0)
 		{
 			NDebug.MessageBox("エラー", "×物理Collidersは空です。");
@@ -110,7 +110,7 @@ public class DynamicBone : MonoBehaviour
 			else
 			{
 				f_bw.Write(this.m_Colliders[i].TypeName);
-				this.m_Colliders[i].Serialize(f_bw, 1210);
+				this.m_Colliders[i].Serialize(f_bw, 1230);
 			}
 		}
 		this.m_ColliderFileName = f_strFileName;
@@ -240,13 +240,7 @@ public class DynamicBone : MonoBehaviour
 		{
 			if (Application.isPlaying)
 			{
-				for (int i = 0; i < this.m_Colliders.Count; i++)
-				{
-					if (this.m_Colliders[i] != null)
-					{
-						UnityEngine.Object.DestroyImmediate(this.m_Colliders[i].gameObject);
-					}
-				}
+				this.Uninit();
 			}
 			this.m_Colliders.Clear();
 		}
@@ -257,7 +251,7 @@ public class DynamicBone : MonoBehaviour
 		}
 		int f_nVersion = f_br.ReadInt32();
 		int num = f_br.ReadInt32();
-		for (int j = 0; j < num; j++)
+		for (int i = 0; i < num; i++)
 		{
 			GameObject gameObject = new GameObject();
 			string text = f_br.ReadString();
@@ -287,6 +281,54 @@ public class DynamicBone : MonoBehaviour
 		}
 		this.m_ColliderFileName = f_strFileName;
 		this.m_strNowReadColliderFileName = f_strFileName;
+		if (GameMain.Instance.CMSystem.SConfig.OvrHandHitToHair && GameMain.Instance.VRMode && GameMain.Instance.VRFamily != GameMain.VRFamilyType.NON)
+		{
+			Transform vrcontrollerTransform = GameMain.Instance.OvrMgr.GetVRControllerTransform(true);
+			if (vrcontrollerTransform != null)
+			{
+				Transform transform = vrcontrollerTransform.Find(DynamicBone.m_vrHandHitObjName);
+				if (transform == null)
+				{
+					GameObject gameObject2 = new GameObject(DynamicBone.m_vrHandHitObjName);
+					transform = gameObject2.transform;
+					transform.transform.SetParent(vrcontrollerTransform, false);
+					transform.localPosition = new Vector3(0.03f, -0.03f, -0.03f);
+				}
+				DynamicBoneCollider orAddComponent = transform.GetOrAddComponent<DynamicBoneCollider>();
+				orAddComponent.m_Radius = 0.07f;
+				this.m_Colliders.Add(orAddComponent);
+			}
+			Transform vrcontrollerTransform2 = GameMain.Instance.OvrMgr.GetVRControllerTransform(false);
+			if (vrcontrollerTransform2 != null)
+			{
+				Transform transform2 = vrcontrollerTransform2.Find(DynamicBone.m_vrHandHitObjName);
+				if (transform2 == null)
+				{
+					GameObject gameObject3 = new GameObject(DynamicBone.m_vrHandHitObjName);
+					transform2 = gameObject3.transform;
+					transform2.transform.SetParent(vrcontrollerTransform2, false);
+					transform2.localPosition = new Vector3(-0.03f, -0.03f, -0.03f);
+				}
+				DynamicBoneCollider orAddComponent2 = transform2.GetOrAddComponent<DynamicBoneCollider>();
+				orAddComponent2.m_Radius = 0.07f;
+				this.m_Colliders.Add(orAddComponent2);
+			}
+		}
+	}
+
+	public void Uninit()
+	{
+		if (this.m_Colliders != null)
+		{
+			for (int i = 0; i < this.m_Colliders.Count; i++)
+			{
+				if (this.m_Colliders[i] != null && this.m_Colliders[i].gameObject.name != DynamicBone.m_vrHandHitObjName)
+				{
+					UnityEngine.Object.DestroyImmediate(this.m_Colliders[i].gameObject);
+				}
+			}
+			this.m_Colliders.Clear();
+		}
 	}
 
 	private void Start()
@@ -1034,6 +1076,10 @@ public class DynamicBone : MonoBehaviour
 
 	private bool m_bSkipStartSetupParticles;
 
+	private static string m_vrHandHitObjName = "VR Hand Hair Hit";
+
+	private bool m_bHandHitEnableBefore;
+
 	public enum UpdateMode
 	{
 		Normal,

+ 108 - 20
Assembly-CSharp/DynamicSkirtBone.cs

@@ -18,7 +18,7 @@ public class DynamicSkirtBone : MonoBehaviour
 	public bool SerializeWrite(BinaryWriter f_bw)
 	{
 		f_bw.Write("CM3D21_PSK");
-		f_bw.Write(1210);
+		f_bw.Write(1230);
 		f_bw.Write(this.m_fPanierRadius);
 		this.SerializeWriteAnimationCurve(f_bw, this.m_PanierRadiusDistrib);
 		int num = (this.m_PanierRadiusDistribGroup == null) ? 0 : this.m_PanierRadiusDistribGroup.Length;
@@ -972,16 +972,16 @@ public class DynamicSkirtBone : MonoBehaviour
 			{
 				if (grabIdx == -1)
 				{
-					for (int num37 = 0; num37 < this.m_nHookBoneCount; num37++)
+					for (int num51 = 0; num51 < this.m_nHookBoneCount; num51++)
 					{
-						int num38 = this.m_nBoneCount / this.m_nHookBoneCount;
-						for (int num39 = 0; num39 < num38; num39++)
+						int num52 = this.m_nBoneCount / this.m_nHookBoneCount;
+						for (int num53 = 0; num53 < num52; num53++)
 						{
-							int num40 = num37 + num39 * this.m_nHookBoneCount;
-							Transform transform18 = this.m_aryBoneTrs[num40];
-							if (handBtns.GetPressDown(AVRControllerButtons.BTN.VIRTUAL_GRUB) && (transform18.position - handTrans.position).magnitude < 0.2f)
+							int num54 = num51 + num53 * this.m_nHookBoneCount;
+							Transform transform21 = this.m_aryBoneTrs[num54];
+							if (handBtns.GetPressDown(AVRControllerButtons.BTN.VIRTUAL_GRUB) && (transform21.position - handTrans.position).magnitude < 0.2f)
 							{
-								grabIdx = num40;
+								grabIdx = num54;
 								break;
 							}
 						}
@@ -989,29 +989,29 @@ public class DynamicSkirtBone : MonoBehaviour
 				}
 				else if (handBtns.GetPress(AVRControllerButtons.BTN.VIRTUAL_GRUB))
 				{
-					for (int num41 = grabIdx; num41 < this.m_nBoneCount; num41 += this.m_nHookBoneCount)
+					for (int num55 = grabIdx; num55 < this.m_nBoneCount; num55 += this.m_nHookBoneCount)
 					{
-						this.m_aryPanierForce[num41] = 0f;
+						this.m_aryPanierForce[num55] = 0f;
 					}
 					Vector3 position9 = handTrans.position;
 					this.m_aryPanierBonePos[3 * grabIdx] = position9.x;
 					this.m_aryPanierBonePos[3 * grabIdx + 1] = position9.y;
 					this.m_aryPanierBonePos[3 * grabIdx + 2] = position9.z;
 					this.m_aryPanierForce[grabIdx] = 1f;
-					Transform transform19 = this.m_aryBoneTrs[grabIdx];
-					for (int num42 = 0; num42 < this.m_nHookBoneCount; num42++)
+					Transform transform22 = this.m_aryBoneTrs[grabIdx];
+					for (int num56 = 0; num56 < this.m_nHookBoneCount; num56++)
 					{
-						int num43 = this.m_nBoneCount / this.m_nHookBoneCount;
-						for (int num44 = 0; num44 < num43; num44++)
+						int num57 = this.m_nBoneCount / this.m_nHookBoneCount;
+						for (int num58 = 0; num58 < num57; num58++)
 						{
-							int num45 = num42 + num44 * this.m_nHookBoneCount;
-							if (grabIdx != num45)
+							int num59 = num56 + num58 * this.m_nHookBoneCount;
+							if (grabIdx != num59)
 							{
-								Transform transform20 = this.m_aryBoneTrs[num45];
-								float magnitude2 = (transform19.position - transform20.position).magnitude;
-								if (magnitude2 <= 0.5f)
+								Transform transform23 = this.m_aryBoneTrs[num59];
+								float magnitude4 = (transform22.position - transform23.position).magnitude;
+								if (magnitude4 <= 0.5f)
 								{
-									this.m_aryPanierForce[num45] *= magnitude2 / 0.5f;
+									this.m_aryPanierForce[num59] *= magnitude4 / 0.5f;
 								}
 							}
 						}
@@ -1066,6 +1066,10 @@ public class DynamicSkirtBone : MonoBehaviour
 				int num34 = num31 + num33 * this.m_nHookBoneCount;
 				Vector3 vector17 = new Vector3(this.m_aryBonePos[3 * num34], this.m_aryBonePos[3 * num34 + 1], this.m_aryBonePos[3 * num34 + 2]);
 				Transform transform17 = this.m_aryBoneTrs[num34];
+				if (GameMain.Instance.VRMode && GameMain.Instance.VRFamily != GameMain.VRFamilyType.NON && num33 != 0)
+				{
+					transform17.localScale = Vector3.one;
+				}
 				transform17.position = vector17;
 				if (num33 < num32 - 1)
 				{
@@ -1092,6 +1096,87 @@ public class DynamicSkirtBone : MonoBehaviour
 				boneScaleDef2.trTarget.localScale = boneScaleDef2.vDefScale;
 			}
 		}
+		if (GameMain.Instance.VRMode && GameMain.Instance.VRFamily != GameMain.VRFamilyType.NON)
+		{
+			CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT ovr_HAND_TO_SKIRT = GameMain.Instance.CMSystem.SConfig.OvrHandHitToSkirt;
+			if (OvrIK.IsModeVRIK)
+			{
+				ovr_HAND_TO_SKIRT = GameMain.Instance.CMSystem.SConfig.OvrHandHitToSkirtVAS;
+			}
+			bool flag4 = ovr_HAND_TO_SKIRT != CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.OFF;
+			if (flag4 && ovr_HAND_TO_SKIRT == CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.GRAB)
+			{
+				AVRControllerButtons vrcontrollerButtons3 = GameMain.Instance.OvrMgr.GetVRControllerButtons(true);
+				if (vrcontrollerButtons3 != null)
+				{
+					flag4 = vrcontrollerButtons3.GetPress(AVRControllerButtons.BTN.VIRTUAL_GRUB);
+				}
+			}
+			bool flag5 = ovr_HAND_TO_SKIRT != CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.OFF;
+			if (flag5 && ovr_HAND_TO_SKIRT == CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.GRAB)
+			{
+				AVRControllerButtons vrcontrollerButtons4 = GameMain.Instance.OvrMgr.GetVRControllerButtons(false);
+				if (vrcontrollerButtons4 != null)
+				{
+					flag5 = vrcontrollerButtons4.GetPress(AVRControllerButtons.BTN.VIRTUAL_GRUB);
+				}
+			}
+			Transform vrcontrollerTransform = GameMain.Instance.OvrMgr.GetVRControllerTransform(true);
+			Transform vrcontrollerTransform2 = GameMain.Instance.OvrMgr.GetVRControllerTransform(false);
+			for (int num37 = 0; num37 < this.m_nHookBoneCount; num37++)
+			{
+				float num38 = float.PositiveInfinity;
+				int num39 = -1;
+				float num40 = float.PositiveInfinity;
+				int num41 = -1;
+				int num42 = this.m_nBoneCount / this.m_nHookBoneCount;
+				for (int num43 = 0; num43 < num42; num43++)
+				{
+					int num44 = num37 + num43 * this.m_nHookBoneCount;
+					Transform transform18 = this.m_aryBoneTrs[num44];
+					if (flag4 && vrcontrollerTransform != null)
+					{
+						float magnitude2 = (transform18.position - vrcontrollerTransform.position).magnitude;
+						if (magnitude2 < num38)
+						{
+							num39 = num43;
+							num38 = magnitude2;
+						}
+					}
+					if (flag5 && vrcontrollerTransform2 != null)
+					{
+						float magnitude3 = (transform18.position - vrcontrollerTransform2.position).magnitude;
+						if (magnitude3 < num40)
+						{
+							num41 = num43;
+							num40 = magnitude3;
+						}
+					}
+				}
+				if (num39 != -1 && num38 < this.m_vrHandHitRaidus)
+				{
+					for (int num45 = 0; num45 < num42; num45++)
+					{
+						int num46 = num37 + num45 * this.m_nHookBoneCount;
+						Transform transform19 = this.m_aryBoneTrs[num46];
+						Vector3 localScale = transform19.localScale;
+						float num47 = (float)num39 / (float)(num42 - 1);
+						transform19.localScale = new Vector3(localScale.x * ((num38 + (this.m_vrHandHitRaidus - num38) * num47) / this.m_vrHandHitRaidus), localScale.y, localScale.z);
+					}
+				}
+				if (num41 != -1 && num40 < this.m_vrHandHitRaidus)
+				{
+					for (int num48 = 0; num48 < num42; num48++)
+					{
+						int num49 = num37 + num48 * this.m_nHookBoneCount;
+						Transform transform20 = this.m_aryBoneTrs[num49];
+						Vector3 localScale2 = transform20.localScale;
+						float num50 = (float)num41 / (float)(num42 - 1);
+						transform20.localScale = new Vector3(localScale2.x * ((num40 + (this.m_vrHandHitRaidus - num40) * num50) / this.m_vrHandHitRaidus), localScale2.y, localScale2.z);
+					}
+				}
+			}
+		}
 		this.m_bResetPos = false;
 	}
 
@@ -1214,6 +1299,9 @@ public class DynamicSkirtBone : MonoBehaviour
 
 	public bool m_bResetPos;
 
+	[Header("VR手のスカートへの当たり判定")]
+	public float m_vrHandHitRaidus = 0.2f;
+
 	public const int SKIRT_W_MAX = 24;
 
 	public const int SKIRT_H_MAX = 48;

+ 1 - 1
Assembly-CSharp/EditMod.cs

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

+ 6 - 0
Assembly-CSharp/EffectWindow.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using wf;
 
@@ -13,6 +14,11 @@ public class EffectWindow : BaseMaidPhotoWindow
 			GameObject gameObject = Utility.CreatePrefab(this.Grid.gameObject, "ScenePhotoMode/WindowListItem", true);
 			gameObject.name = this.EffectObjectArray[i].Id.ToString();
 			gameObject.GetComponentInChildren<UILabel>().text = this.EffectObjectArray[i].Name;
+			Localize componentInChildren = gameObject.GetComponentInChildren<Localize>();
+			if (componentInChildren != null)
+			{
+				componentInChildren.SetTerm("ScenePhotoMode/エフェクト/" + this.EffectObjectArray[i].Name);
+			}
 			EventDelegate.Add(gameObject.GetComponent<UIWFTabButton>().onSelect, new EventDelegate.Callback(this.OnSelectEvent));
 			this.id_btn_dic_.Add(long.Parse(gameObject.name), gameObject.GetComponent<UIWFTabButton>());
 		}

+ 16 - 14
Assembly-CSharp/EmpireLifeModeAPI.cs

@@ -20,17 +20,17 @@ public static class EmpireLifeModeAPI
 		EmpireLifeModeAPI.m_ScenarioTypeIconDic = new Dictionary<EmpireLifeModeData.ScenarioType, Texture2D>();
 		Func<string, Texture2D> func = delegate(string strFileName)
 		{
-			if (GameUty.FileSystem.IsExistentFile(strFileName + ".tex"))
+			if (!string.IsNullOrEmpty(strFileName) && GameUty.FileSystem.IsExistentFile(strFileName + ".tex"))
 			{
 				return ImportCM.CreateTexture(strFileName + ".tex");
 			}
 			return null;
 		};
-		EmpireLifeModeAPI.m_ScenarioTypeIconDic.Add(EmpireLifeModeData.ScenarioType.一般, func("life_mode_event_icon_general"));
-		EmpireLifeModeAPI.m_ScenarioTypeIconDic.Add(EmpireLifeModeData.ScenarioType.汎用, func("life_mode_event_icon_universal"));
-		EmpireLifeModeAPI.m_ScenarioTypeIconDic.Add(EmpireLifeModeData.ScenarioType.スト\u30FCリ\u30FC, func("life_mode_event_icon_story"));
-		EmpireLifeModeAPI.m_ScenarioTypeIconDic.Add(EmpireLifeModeData.ScenarioType.Hシ\u30FCン, func("life_mode_event_icon_hentai"));
-		EmpireLifeModeAPI.m_ScenarioTypeIconDic.Add(EmpireLifeModeData.ScenarioType.セクハラ, func("life_mode_event_icon_sexual_harassment"));
+		EmpireLifeModeAPI.m_ScenarioTypeIconDic.Add(EmpireLifeModeData.ScenarioType.一般, func("life_icon02_exclamation"));
+		EmpireLifeModeAPI.m_ScenarioTypeIconDic.Add(EmpireLifeModeData.ScenarioType.汎用, null);
+		EmpireLifeModeAPI.m_ScenarioTypeIconDic.Add(EmpireLifeModeData.ScenarioType.スト\u30FCリ\u30FC, func("life_icon01_ster"));
+		EmpireLifeModeAPI.m_ScenarioTypeIconDic.Add(EmpireLifeModeData.ScenarioType.Hシ\u30FCン, func("life_icon03_heart"));
+		EmpireLifeModeAPI.m_ScenarioTypeIconDic.Add(EmpireLifeModeData.ScenarioType.セクハラ, func("life_icon03_heart"));
 	}
 
 	public static Texture2D GetIconScenarioType(EmpireLifeModeData.ScenarioType scenarioType)
@@ -111,7 +111,7 @@ public static class EmpireLifeModeAPI
 				num2++;
 			}
 		}
-		return num * 2 + num2 + 2 * (num2 / 5);
+		return num * 2 + num2 + 2 * (num2 / 5) + 2 * (num2 / 10) + num2 / 10;
 	}
 
 	public static List<Maid> SelectionMaidList(IEnumerable<Maid> maidList)
@@ -123,7 +123,10 @@ public static class EmpireLifeModeAPI
 			{
 				if (maid.status.heroineType != HeroineType.Sub)
 				{
-					list.Add(maid);
+					if (EmpireLifeModeData.Data.personalUniqueNameEnabledList.Contains(maid.status.personal.uniqueName))
+					{
+						list.Add(maid);
+					}
 				}
 			}
 		}
@@ -167,12 +170,12 @@ public static class EmpireLifeModeAPI
 
 	public static bool IsCorrectMaid(this EmpireLifeModeData.Data data, Maid maid)
 	{
-		return data.IsCorrectMaidMainCharaOnly(maid) && data.IsCorrectMaidSeikeiken(maid) && data.IsCorrectMaidPersonalType(maid) && data.IsCorrectMaidFlag(maid) && data.IsCorrectMaidStatus(maid) && data.IsCorrectMaidExecuteCount(maid);
+		return data.IsCorrectMaidMainCharaOnly(maid) && data.IsCorrectMaidSeikeiken(maid) && data.IsCorrectMaidPersonalType(maid) && data.IsCorrectMaidFlag(maid) && data.IsCorrectMaidStatus(maid) && data.IsCorrectMaidExecuteCount(maid) && data.IsCorrectMaidContract(maid) && data.IsCorrectMaidRelation(maid);
 	}
 
 	public static bool IsCorrectUniqueComparisonObject(this EmpireLifeModeData.Data data)
 	{
-		return data.IsCorrectNTRBlock() && data.IsCorrectTimeZone() && data.IsCorrectPlayerFlag();
+		return data.IsCorrectNTRBlock() && data.IsCorrectTimeZone() && data.IsCorrectPlayerFlag() && data.IsCorrectScenarioAnyNumberPlay();
 	}
 
 	public static bool IsCorrectScenarioType(this EmpireLifeModeData.Data data, EmpireLifeModeData.ScenarioType scenarioType)
@@ -182,8 +185,7 @@ public static class EmpireLifeModeAPI
 
 	public static bool IsCorrectScenarioAnyNumberPlay(this EmpireLifeModeData.Data data)
 	{
-		Debug.LogWarning("未実装:シナリオを再生したかどうかのフラグは、まだゲーム内で保存されない。");
-		return true;
+		return data.dataScenarioAnyNumberPlay || 0 >= GameMain.Instance.LifeModeMgr.GetScenarioExecuteCount(data.ID);
 	}
 
 	public static bool IsCorrectNTRBlock(this EmpireLifeModeData.Data data)
@@ -281,7 +283,7 @@ public static class EmpireLifeModeAPI
 		return data.dataMaidMainCharaOnly == null || maid.status.mainChara == data.dataMaidMainCharaOnly;
 	}
 
-	public static bool IsCorrectContract(this EmpireLifeModeData.Data data, Maid maid)
+	public static bool IsCorrectMaidContract(this EmpireLifeModeData.Data data, Maid maid)
 	{
 		return data.IsCorrectContract(maid.status.contract);
 	}
@@ -291,7 +293,7 @@ public static class EmpireLifeModeAPI
 		return data.dataMaidContract == null || data.dataMaidContract == contract;
 	}
 
-	public static bool IsCorrectRelation(this EmpireLifeModeData.Data data, Maid maid)
+	public static bool IsCorrectMaidRelation(this EmpireLifeModeData.Data data, Maid maid)
 	{
 		return data.IsCorrectRelation(maid.status.relation);
 	}

+ 29 - 0
Assembly-CSharp/EmpireLifeModeData.cs

@@ -515,6 +515,33 @@ public static class EmpireLifeModeData
 			}
 		}
 
+		public static List<string> personalUniqueNameEnabledList
+		{
+			get
+			{
+				if (EmpireLifeModeData.Data.m_PersonalUniqueNameEnabledList == null)
+				{
+					EmpireLifeModeData.Data.m_PersonalUniqueNameEnabledList = new List<string>();
+					List<EmpireLifeModeData.Data> allDatas = EmpireLifeModeData.GetAllDatas(true);
+					int count = allDatas.Count;
+					for (int i = 0; i < count; i++)
+					{
+						using (Dictionary<int, string>.ValueCollection.Enumerator enumerator = allDatas[i].dataMaidPersonalUniqueNameAndActiveSlotDic.Values.GetEnumerator())
+						{
+							while (enumerator.MoveNext())
+							{
+								if (!EmpireLifeModeData.Data.m_PersonalUniqueNameEnabledList.Contains(enumerator.Current))
+								{
+									EmpireLifeModeData.Data.m_PersonalUniqueNameEnabledList.Add(enumerator.Current);
+								}
+							}
+						}
+					}
+				}
+				return EmpireLifeModeData.Data.m_PersonalUniqueNameEnabledList;
+			}
+		}
+
 		public readonly int ID;
 
 		public readonly string strUniqueName;
@@ -598,5 +625,7 @@ public static class EmpireLifeModeData
 		private static Dictionary<string, Contract> m_ContractTypeDic;
 
 		private static Dictionary<string, Relation> m_RelationTypeDic;
+
+		private static List<string> m_PersonalUniqueNameEnabledList;
 	}
 }

File diff suppressed because it is too large
+ 63 - 19
Assembly-CSharp/EmpireLifeModeManager.cs


+ 13 - 5
Assembly-CSharp/FaceWindow.cs

@@ -10,19 +10,26 @@ public class FaceWindow : BaseMaidPhotoWindow
 		base.Awake();
 		PhotoFaceData.Create();
 		this.noCharaActive = base.GetComponentInChildren<PhotoNoCharaActive>();
-		Dictionary<string, List<KeyValuePair<string, object>>> dictionary = new Dictionary<string, List<KeyValuePair<string, object>>>();
+		Dictionary<string, List<string>> dictionary = new Dictionary<string, List<string>>();
+		Dictionary<string, List<KeyValuePair<string, object>>> dictionary2 = new Dictionary<string, List<KeyValuePair<string, object>>>();
 		foreach (KeyValuePair<string, List<PhotoFaceData>> keyValuePair in PhotoFaceData.category_list)
 		{
-			if (!dictionary.ContainsKey(keyValuePair.Key))
+			if (!dictionary2.ContainsKey(keyValuePair.Key))
 			{
-				dictionary.Add(keyValuePair.Key, new List<KeyValuePair<string, object>>());
+				dictionary2.Add(keyValuePair.Key, new List<KeyValuePair<string, object>>());
+				dictionary.Add(keyValuePair.Key, new List<string>());
 			}
 			for (int i = 0; i < keyValuePair.Value.Count; i++)
 			{
-				dictionary[keyValuePair.Key].Add(new KeyValuePair<string, object>(keyValuePair.Value[i].name, keyValuePair.Value[i]));
+				dictionary2[keyValuePair.Key].Add(new KeyValuePair<string, object>(keyValuePair.Value[i].name, keyValuePair.Value[i]));
+				dictionary[keyValuePair.Key].Add(keyValuePair.Value[i].termName);
 			}
 		}
-		this.PopupAndTabList.SetData(dictionary, false);
+		if (!GameUty.supportMultiLanguage)
+		{
+			dictionary = null;
+		}
+		this.PopupAndTabList.SetData(dictionary2, dictionary, false);
 		this.PopupAndTabList.onChangePopUpListValue.Add(new Action<KeyValuePair<string, UnityEngine.Object>>(this.OnChangePopUpList));
 		this.PopupAndTabList.onSelect.Add(new Action<object>(this.OnSelectItem));
 		this.SliderFaceToX.onChangeValue.Add(new Action<WindowPartsInputSliderSet.SliderAndInputSet, float>(this.OnChangeSliderXValue));
@@ -441,6 +448,7 @@ public class FaceWindow : BaseMaidPhotoWindow
 			}
 			Dictionary<string, string> maidStoreData = base.GetMaidStoreData(maid);
 			PhotoFaceData photoFaceData = PhotoFaceData.Get(long.Parse(maidStoreData["id"]));
+			this.PopupAndTabList.popup_term_list = ((!GameUty.supportMultiLanguage) ? null : PhotoFaceData.popup_category_term_list);
 			this.PopupAndTabList.popup_value_list = PhotoFaceData.popup_category_list;
 			this.PopupAndTabList.SetPopupValue(photoFaceData.category);
 			this.PopupAndTabList.SetSelectButton(photoFaceData, false);

+ 19 - 0
Assembly-CSharp/Facility.cs

@@ -2,6 +2,7 @@
 using System.Collections.Generic;
 using System.IO;
 using System.Text;
+using I2.Loc;
 using MaidStatus;
 using Schedule;
 using UnityEngine;
@@ -14,6 +15,14 @@ public class Facility : MonoBehaviour
 		Facility.FacilityStatus facilityStatus = FacilityDataTable.GetFacilityStatus(facilityTypeID, true);
 		this.param.typeID = facilityStatus.typeID;
 		this.param.name = facilityStatus.name;
+		if (GameUty.supportMultiLanguage)
+		{
+			string translation = LocalizationManager.GetTranslation(facilityStatus.termName, true, 0, true, false, null, null);
+			if (!string.IsNullOrEmpty(translation))
+			{
+				this.param.name = translation;
+			}
+		}
 		this.param.parameter = facilityStatus.parameter;
 		if (FacilityDataTable.IsExistFacilityPowerUpRecipe(facilityTypeID, true))
 		{
@@ -1339,6 +1348,14 @@ public class Facility : MonoBehaviour
 		}
 	}
 
+	public string defaultTermName
+	{
+		get
+		{
+			return FacilityDataTable.GetFacilityStatus(this.param.typeID, true).termName;
+		}
+	}
+
 	public FacilityDataTable.FacilityDefaultData defaultData
 	{
 		get
@@ -1390,6 +1407,8 @@ public class Facility : MonoBehaviour
 
 		public string name = string.Empty;
 
+		public string termName = string.Empty;
+
 		public Facility.FacilityParameter parameter = new Facility.FacilityParameter();
 	}
 

+ 11 - 0
Assembly-CSharp/FacilityDataTable.cs

@@ -386,6 +386,7 @@ public static class FacilityDataTable
 		return new Facility.FacilityStatus
 		{
 			name = facilityDefaultData.name,
+			termName = facilityDefaultData.termName,
 			typeID = facilityDefaultData.ID,
 			parameter = new Facility.FacilityParameter(facilityDefaultData.income, facilityDefaultData.valuation, facilityDefaultData.experienceValue)
 		};
@@ -1053,6 +1054,16 @@ public static class FacilityDataTable
 			}
 		}
 
+		public string termName
+		{
+			get
+			{
+				return "SceneFacilityManagement/施設名/" + this.name;
+			}
+		}
+
+		public const string termRootText = "SceneFacilityManagement/";
+
 		public readonly int ID;
 
 		public readonly string name;

+ 19 - 0
Assembly-CSharp/FacilityInfoUI.cs

@@ -1,4 +1,5 @@
 using System;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine.UI;
 
@@ -111,6 +112,19 @@ public class FacilityInfoUI : MonoBehaviour
 		if (this.m_TextFacilityName)
 		{
 			this.m_TextFacilityName.text = text;
+			Localize componentInChildren = this.m_TextFacilityName.GetComponentInChildren<Localize>();
+			if (componentInChildren != null)
+			{
+				if (text == "空き部屋")
+				{
+					this.m_TextFacilityName.enabled = false;
+					componentInChildren.SetTerm("SceneFacilityManagement/" + text);
+				}
+				else if (this.m_Facility != null && this.m_Facility.defaultName == text)
+				{
+					componentInChildren.SetTerm(this.m_Facility.defaultData.termName);
+				}
+			}
 		}
 		if (this.m_ImageFacilityThumbnail)
 		{
@@ -139,6 +153,11 @@ public class FacilityInfoUI : MonoBehaviour
 		if (this.m_TextStatusOfFacility)
 		{
 			this.m_TextStatusOfFacility.text = text7;
+			Localize component = this.m_TextStatusOfFacility.GetComponent<Localize>();
+			if (component != null)
+			{
+				component.SetTerm("SceneFacilityManagement/" + text7);
+			}
 		}
 		if (this.m_uGUIListRankStar)
 		{

+ 1 - 1
Assembly-CSharp/FacilityManager.cs

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

+ 2 - 2
Assembly-CSharp/FacilityPowerUpManager.cs

@@ -154,7 +154,7 @@ public class FacilityPowerUpManager : MonoBehaviour
 			return;
 		}
 		uGUIUtility.SetActiveEventSystem(false);
-		GameMain.Instance.SysDlg.Show("施設の強化を実行しますか?", SystemDialog.TYPE.YES_NO, delegate
+		GameMain.Instance.SysDlg.Show(SceneFacilityManagement.GetDialogText("施設の強化を実行しますか?"), SystemDialog.TYPE.YES_NO, delegate
 		{
 			GameMain.Instance.SysDlg.Close();
 			this.m_SelectingFacility.SetRecipeData(this.m_NowRecipeData);
@@ -183,7 +183,7 @@ public class FacilityPowerUpManager : MonoBehaviour
 			return;
 		}
 		uGUIUtility.SetActiveEventSystem(false);
-		GameMain.Instance.SysDlg.Show("施設の強化をせずに終了します。\nよろしいですか?", SystemDialog.TYPE.YES_NO, delegate
+		GameMain.Instance.SysDlg.Show(SceneFacilityManagement.GetDialogText("施設の強化をせずに終了します。よろしいですか?"), SystemDialog.TYPE.YES_NO, delegate
 		{
 			GameMain.Instance.SysDlg.Close();
 			uGUIUtility.SetActiveEventSystem(true);

+ 16 - 0
Assembly-CSharp/FacilityUIPowerUpList.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine.UI;
 
@@ -26,7 +27,12 @@ public class FacilityUIPowerUpList : MonoBehaviour
 			Facility.PowerUpRecipe powerUpRecipe = FacilityDataTable.GetFacilityPowerUpRecipe(<SetupFacilityPowerUpListButton>c__AnonStorey.powerUpRecipeIDArray[i]);
 			Toggle componentInChildren = trans.GetComponentInChildren<Toggle>();
 			Text componentInChildren2 = trans.GetComponentInChildren<Text>();
+			Localize component = componentInChildren2.GetComponent<Localize>();
 			componentInChildren2.text = powerUpRecipe.name;
+			if (component != null)
+			{
+				component.SetTerm("SceneFacilityManagement/強化種類/" + powerUpRecipe.name);
+			}
 			componentInChildren.onValueChanged.RemoveAllListeners();
 			componentInChildren.onValueChanged.AddListener(delegate(bool isOn)
 			{
@@ -47,8 +53,13 @@ public class FacilityUIPowerUpList : MonoBehaviour
 			{
 				Toggle componentInChildren = trans.GetComponentInChildren<Toggle>();
 				Text componentInChildren2 = trans.GetComponentInChildren<Text>();
+				Localize component = componentInChildren2.GetComponent<Localize>();
 				componentInChildren.enabled = false;
 				componentInChildren2.text = "レシピは存在しません。";
+				if (component != null)
+				{
+					component.SetTerm("SceneFacilityManagement/強化種類/レシピは存在しません");
+				}
 			});
 		}
 		this.m_uGUIListConditions.ResetList();
@@ -75,8 +86,13 @@ public class FacilityUIPowerUpList : MonoBehaviour
 		{
 			string text = strConditionsList[i];
 			Text[] componentsInChildren = trans.GetComponentsInChildren<Text>();
+			Localize component = componentsInChildren[1].GetComponent<Localize>();
 			componentsInChildren[0].text = (i + 1).ToString();
 			componentsInChildren[1].text = text;
+			if (component != null)
+			{
+				component.SetTerm("SceneFacilityManagement/実行条件/" + text);
+			}
 			Image componentInChildren = trans.GetComponentInChildren<Image>();
 			componentInChildren.enabled = (i % 2 != 0);
 		});

+ 38 - 2
Assembly-CSharp/FacilityUIPowerUpMaterialList.cs

@@ -1,4 +1,5 @@
 using System;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine.EventSystems;
 using UnityEngine.UI;
@@ -41,25 +42,60 @@ public class FacilityUIPowerUpMaterialList : MonoBehaviour
 			string facilityPowerUpMaterialCategoryName = FacilityDataTable.GetFacilityPowerUpMaterialCategoryName(num);
 			componentsInChildren[0].text = facilityPowerUpMaterialCategoryName;
 			componentsInChildren[1].text = string.Format("CATEGORY{0}", i + 1);
+			Localize component = componentsInChildren[0].GetComponent<Localize>();
+			if (component != null)
+			{
+				component.SetTerm("SceneFacilityManagement/強化素材カテゴリー/" + facilityPowerUpMaterialCategoryName);
+			}
 			componentInChildren.ClearOptions();
 			Facility.PowerUpMaterial[] materialArray = <SetupFacilityPowerUpMaterialListDropDown>c__AnonStorey.$this.FacilityMgr.GetFacilityPowerUpItemEnableArray(num);
+			LocalizeDropdown localizeDropdown = null;
+			if (GameUty.supportMultiLanguage)
+			{
+				localizeDropdown = componentInChildren.GetComponent<LocalizeDropdown>();
+				if (localizeDropdown != null)
+				{
+					localizeDropdown.enabled = true;
+					localizeDropdown._Terms.Clear();
+				}
+			}
 			if (materialArray.Length > 0)
 			{
 				for (int j = 0; j < materialArray.Length; j++)
 				{
-					componentInChildren.options.Add(new Dropdown.OptionData(materialArray[j].name));
+					if (localizeDropdown != null)
+					{
+						localizeDropdown._Terms.Add("SceneFacilityManagement/強化素材/" + materialArray[j].name);
+					}
+					else
+					{
+						componentInChildren.options.Add(new Dropdown.OptionData(materialArray[j].name));
+					}
 					if (<SetupFacilityPowerUpMaterialListDropDown>c__AnonStorey.recipeData.materialIDArray[i] == materialArray[j].id)
 					{
 						dropdownPowerUpMaterial.materialID = materialArray[j].id;
 						componentInChildren.value = j;
 					}
 				}
+				if (localizeDropdown != null)
+				{
+					localizeDropdown.UpdateLocalization();
+				}
 			}
 			else
 			{
 				componentInChildren.image.raycastTarget = false;
 				dropdownPowerUpMaterial.materialID = 0;
-				componentInChildren.options.Add(new Dropdown.OptionData("無し"));
+				if (localizeDropdown != null)
+				{
+					localizeDropdown._Terms.Clear();
+					localizeDropdown._Terms.Add("SceneFacilityManagement/強化素材/無し");
+					localizeDropdown.UpdateLocalization();
+				}
+				else
+				{
+					componentInChildren.options.Add(new Dropdown.OptionData("無し"));
+				}
 			}
 			if (dropdownPowerUpMaterial.materialID == 0)
 			{

+ 28 - 0
Assembly-CSharp/FacilityUIPreviewParams.cs

@@ -1,4 +1,5 @@
 using System;
+using I2.Loc;
 using UnityEngine;
 using UnityEngine.UI;
 
@@ -44,6 +45,15 @@ public class FacilityUIPreviewParams : MonoBehaviour
 			text.text = string.Format("{0}  +{1}", parameterName, num);
 			Image componentInChildren = text.GetComponentInChildren<Image>();
 			componentInChildren.enabled = (i % 2 == 0);
+			Localize component = text.GetComponent<Localize>();
+			if (component != null)
+			{
+				component.TermArgs = new Localize.ArgsPair[]
+				{
+					Localize.ArgsPair.Create(num.ToString())
+				};
+				component.SetTerm("SceneFacilityManagement/パラメータ/" + parameterName);
+			}
 		});
 	}
 
@@ -63,6 +73,15 @@ public class FacilityUIPreviewParams : MonoBehaviour
 			text.text = string.Format("{0}  +{1}", parameterName, num);
 			Image componentInChildren = text.GetComponentInChildren<Image>();
 			componentInChildren.enabled = (itemCount % 2 == 1);
+			Localize component = text.GetComponent<Localize>();
+			if (component != null)
+			{
+				component.TermArgs = new Localize.ArgsPair[]
+				{
+					Localize.ArgsPair.Create(num.ToString())
+				};
+				component.SetTerm("SceneFacilityManagement/パラメータ/" + parameterName);
+			}
 		});
 	}
 
@@ -95,6 +114,15 @@ public class FacilityUIPreviewParams : MonoBehaviour
 			{
 				text.color = Color.cyan;
 			}
+			Localize component = text.GetComponent<Localize>();
+			if (component != null)
+			{
+				component.TermArgs = new Localize.ArgsPair[]
+				{
+					Localize.ArgsPair.Create(num.ToString())
+				};
+				component.SetTerm("SceneFacilityManagement/パラメータ/" + parameterName);
+			}
 		});
 	}
 

+ 29 - 0
Assembly-CSharp/FreeModeItemEveryday.cs

@@ -122,6 +122,14 @@ public class FreeModeItemEveryday : AbstractFreeModeItem
 		}
 	}
 
+	public override string titleTerm
+	{
+		get
+		{
+			return "SceneFreeModeSelect/タイトル/" + this.everyday_event_data_.name;
+		}
+	}
+
 	public override string text
 	{
 		get
@@ -130,6 +138,14 @@ public class FreeModeItemEveryday : AbstractFreeModeItem
 		}
 	}
 
+	public override string textTerm
+	{
+		get
+		{
+			return "SceneFreeModeSelect/説明/" + this.everyday_event_data_.name;
+		}
+	}
+
 	public override string[] condition_texts
 	{
 		get
@@ -138,6 +154,19 @@ public class FreeModeItemEveryday : AbstractFreeModeItem
 		}
 	}
 
+	public override string[] condition_text_terms
+	{
+		get
+		{
+			List<string> list = new List<string>();
+			foreach (string str in this.everyday_event_data_.condition_texts)
+			{
+				list.Add("SceneFreeModeSelect/条件文/" + str);
+			}
+			return list.ToArray();
+		}
+	}
+
 	public override bool is_enabled
 	{
 		get

+ 33 - 15
Assembly-CSharp/FreeModeItemList.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using wf;
 
@@ -30,33 +31,39 @@ public class FreeModeItemList : MonoBehaviour
 		for (int i = 0; i < item_list.Length; i++)
 		{
 			GameObject gameObject = Utility.CreatePrefab(this.grid_.gameObject, "SceneFreeModeSelect/FreeModeItemButton", true);
-			UTY.GetChildObject(gameObject, "Name", false).GetComponent<UILabel>().text = item_list[i].title;
-			UIWFTabButton component = gameObject.GetComponent<UIWFTabButton>();
-			component.isEnabled = false;
-			EventDelegate.Add(component.onSelect, new EventDelegate.Callback(this.OnSelectItem));
-			UIEventTrigger component2 = gameObject.GetComponent<UIEventTrigger>();
+			UILabel component = UTY.GetChildObject(gameObject, "Name", false).GetComponent<UILabel>();
+			Localize component2 = component.GetComponent<Localize>();
+			component.text = item_list[i].title;
+			if (component2 != null)
+			{
+				component2.SetTerm(item_list[i].titleTerm);
+			}
+			UIWFTabButton component3 = gameObject.GetComponent<UIWFTabButton>();
+			component3.isEnabled = false;
+			EventDelegate.Add(component3.onSelect, new EventDelegate.Callback(this.OnSelectItem));
+			UIEventTrigger component4 = gameObject.GetComponent<UIEventTrigger>();
 			EventDelegate eventDelegate = new EventDelegate(this, "OnMouseHoverIn");
-			eventDelegate.parameters[0].value = component;
-			EventDelegate.Add(component2.onHoverOver, eventDelegate);
-			EventDelegate.Add(component2.onHoverOut, new EventDelegate.Callback(this.OnMouseHoverOut));
-			component2 = UTY.GetChildObject(gameObject, "HitRect", false).GetComponent<UIEventTrigger>();
+			eventDelegate.parameters[0].value = component3;
+			EventDelegate.Add(component4.onHoverOver, eventDelegate);
+			EventDelegate.Add(component4.onHoverOut, new EventDelegate.Callback(this.OnMouseHoverOut));
+			component4 = UTY.GetChildObject(gameObject, "HitRect", false).GetComponent<UIEventTrigger>();
 			eventDelegate = new EventDelegate(this, "OnMouseHoverIn");
-			eventDelegate.parameters[0].value = component;
-			EventDelegate.Add(component2.onHoverOver, eventDelegate);
-			EventDelegate.Add(component2.onHoverOut, new EventDelegate.Callback(this.OnMouseHoverOut));
+			eventDelegate.parameters[0].value = component3;
+			EventDelegate.Add(component4.onHoverOver, eventDelegate);
+			EventDelegate.Add(component4.onHoverOut, new EventDelegate.Callback(this.OnMouseHoverOut));
 			bool is_enabled = item_list[i].is_enabled;
 			if (is_enabled)
 			{
-				component.isEnabled = true;
+				component3.isEnabled = true;
 				UTY.GetChildObject(gameObject, "HitRect", false).SetActive(false);
 				if (uiwftabButton == null)
 				{
-					uiwftabButton = component;
+					uiwftabButton = component3;
 				}
 			}
 			else
 			{
-				component.isEnabled = false;
+				component3.isEnabled = false;
 				UTY.GetChildObject(gameObject, "HitRect", false).SetActive(true);
 			}
 			this.item_obj_dic_.Add(gameObject, item_list[i]);
@@ -105,12 +112,23 @@ public class FreeModeItemList : MonoBehaviour
 		else
 		{
 			this.info_label_.text = select_item_dat.text;
+			Localize component = this.info_label_.GetComponent<Localize>();
+			if (component != null)
+			{
+				component.SetTerm(select_item_dat.textTerm);
+			}
+			string[] condition_text_terms = select_item_dat.condition_text_terms;
 			for (int j = 0; j < this.condition_label_list_.Count; j++)
 			{
 				if (j < select_item_dat.condition_texts.Length)
 				{
 					this.condition_label_list_[j].transform.parent.gameObject.SetActive(true);
 					this.condition_label_list_[j].text = select_item_dat.condition_texts[j];
+					component = this.condition_label_list_[j].GetComponent<Localize>();
+					if (component != null)
+					{
+						component.SetTerm(condition_text_terms[j]);
+					}
 				}
 				else
 				{

+ 29 - 0
Assembly-CSharp/FreeModeItemVip.cs

@@ -54,6 +54,14 @@ public class FreeModeItemVip : AbstractFreeModeItem
 		}
 	}
 
+	public override string titleTerm
+	{
+		get
+		{
+			return "SceneDaily/スケジュール/項目/" + this.vip_data_.name;
+		}
+	}
+
 	public override string text
 	{
 		get
@@ -62,6 +70,14 @@ public class FreeModeItemVip : AbstractFreeModeItem
 		}
 	}
 
+	public override string textTerm
+	{
+		get
+		{
+			return "SceneDaily/スケジュール/条件文/" + this.vip_data_.name;
+		}
+	}
+
 	public override string[] condition_texts
 	{
 		get
@@ -70,6 +86,19 @@ public class FreeModeItemVip : AbstractFreeModeItem
 		}
 	}
 
+	public override string[] condition_text_terms
+	{
+		get
+		{
+			List<string> list = new List<string>();
+			foreach (string str in this.vip_data_.condInfo)
+			{
+				list.Add("SceneDaily/スケジュール/条件文/" + str);
+			}
+			return list.ToArray();
+		}
+	}
+
 	public override bool is_enabled
 	{
 		get

+ 8 - 1
Assembly-CSharp/FreeModeSelect.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using I2.Loc;
 
 public class FreeModeSelect : WfScreenChildren
 {
@@ -21,7 +22,13 @@ public class FreeModeSelect : WfScreenChildren
 		{
 			this.btn_dic_.Add("VIP", UTY.GetChildObject(base.root_obj, "Menu/FreeModeMenuButton/VIP_HEvent", false).GetComponent<UIButton>());
 		}
-		UTY.GetChildObject(base.root_obj, "Menu/ExplanatoryText/Value", false).GetComponent<UILabel>().text = "回想のジャンルを選択してください。";
+		UILabel component = UTY.GetChildObject(base.root_obj, "Menu/ExplanatoryText/Value", false).GetComponent<UILabel>();
+		Localize component2 = component.GetComponent<Localize>();
+		component.text = "回想のジャンルを選択してください。";
+		if (component2 != null)
+		{
+			component2.SetTerm("SceneFreeModeSelect/回想のジャンルを選択してください。");
+		}
 		foreach (KeyValuePair<string, UIButton> keyValuePair in this.btn_dic_)
 		{
 			EventDelegate eventDelegate = new EventDelegate(this, "OnClickEvent");

+ 47 - 27
Assembly-CSharp/FreeSkillSelect.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using wf;
 using Yotogis;
@@ -112,7 +113,7 @@ public class FreeSkillSelect : MonoBehaviour
 		for (int j = 0; j < 3; j++)
 		{
 			EventDelegate onclick_event = new EventDelegate(this, "OnClickLevelBtnEvent");
-			UIWFTabButton uiwftabButton = this.CreateTypeAndCategoryButton(updateObject3, "Lv." + (j + 1).ToString(), true, onclick_event);
+			UIWFTabButton uiwftabButton = this.CreateTypeAndCategoryButton(updateObject3, "Lv." + (j + 1).ToString(), null, true, onclick_event);
 			uiwftabButton.name = (j + 1).ToString();
 		}
 		updateObject3.Update();
@@ -134,7 +135,7 @@ public class FreeSkillSelect : MonoBehaviour
 			eventDelegate.parameters[0].value = buttonData;
 			if (buttonData.children_list.Count != 0)
 			{
-				buttonData.tab_button_obj = this.CreateTypeAndCategoryButton(updateObject2, buttonData.name, 0 < this.button_data_list_[l].children_list.Count, eventDelegate);
+				buttonData.tab_button_obj = this.CreateTypeAndCategoryButton(updateObject2, buttonData.name, buttonData.nameTerm, 0 < this.button_data_list_[l].children_list.Count, eventDelegate);
 			}
 		}
 		updateObject2.Update();
@@ -235,7 +236,7 @@ public class FreeSkillSelect : MonoBehaviour
 			{
 				goto IL_87;
 			}
-			IL_E7:
+			IL_EE:
 			i++;
 			continue;
 			IL_87:
@@ -246,8 +247,8 @@ public class FreeSkillSelect : MonoBehaviour
 				eventDelegate = new EventDelegate(this, "OnClickCategoryBtnEvent");
 				eventDelegate.parameters[0].value = buttonData;
 			}
-			buttonData.tab_button_obj = this.CreateTypeAndCategoryButton(updateObject, buttonData.name, flag, eventDelegate);
-			goto IL_E7;
+			buttonData.tab_button_obj = this.CreateTypeAndCategoryButton(updateObject, buttonData.name, buttonData.nameTerm, flag, eventDelegate);
+			goto IL_EE;
 		}
 		updateObject.Update();
 		List<Transform> childList = updateObject.ui_grid.GetChildList();
@@ -354,32 +355,44 @@ public class FreeSkillSelect : MonoBehaviour
 		{
 			gameObject = Utility.CreatePrefab(updateObject.button_parent, "SceneYotogi/FreeMode/FreeSkillButton", true);
 		}
-		UTY.GetChildObject(gameObject, "title", false).GetComponent<UILabel>().text = skill_data.name;
+		UILabel component = UTY.GetChildObject(gameObject, "title", false).GetComponent<UILabel>();
+		Localize component2 = component.GetComponent<Localize>();
+		component.text = skill_data.name;
 		gameObject.name = skill_data.name;
-		UIWFTabButton component = UTY.GetChildObject(gameObject, "BG", false).GetComponent<UIWFTabButton>();
+		if (component2 != null)
+		{
+			component2.SetTerm(skill_data.termName);
+		}
+		UIWFTabButton component3 = UTY.GetChildObject(gameObject, "BG", false).GetComponent<UIWFTabButton>();
 		if (onclick_event != null)
 		{
-			component.onClick.Add(onclick_event);
+			component3.onClick.Add(onclick_event);
 		}
-		return component;
+		return component3;
 	}
 
-	private UIWFTabButton CreateTypeAndCategoryButton(FreeSkillSelect.UpdateObject update_obj, string name, bool enabled, EventDelegate onclick_event)
+	private UIWFTabButton CreateTypeAndCategoryButton(FreeSkillSelect.UpdateObject update_obj, string name, string nameTerm, bool enabled, EventDelegate onclick_event)
 	{
 		GameObject gameObject = update_obj.MoveButtonParent();
 		if (gameObject == null)
 		{
 			gameObject = Utility.CreatePrefab(update_obj.button_parent, "SceneYotogi/SkillSelect/Prefab/CategoryBtn", true);
 		}
-		UTY.GetChildObject(gameObject, "Label", false).GetComponent<UILabel>().text = name;
-		UIWFTabButton component = UTY.GetChildObject(gameObject, "Button", false).GetComponent<UIWFTabButton>();
+		UILabel component = UTY.GetChildObject(gameObject, "Label", false).GetComponent<UILabel>();
+		Localize component2 = component.GetComponent<Localize>();
+		component.text = name;
+		if (component2 != null && !string.IsNullOrEmpty(nameTerm))
+		{
+			component2.SetTerm(nameTerm);
+		}
+		UIWFTabButton component3 = UTY.GetChildObject(gameObject, "Button", false).GetComponent<UIWFTabButton>();
 		gameObject.name = name;
-		component.isEnabled = enabled;
+		component3.isEnabled = enabled;
 		if (enabled && onclick_event != null)
 		{
-			component.onClick.Add(onclick_event);
+			component3.onClick.Add(onclick_event);
 		}
-		return component;
+		return component3;
 	}
 
 	private void OnClickTypeBtnEvent(FreeSkillSelect.ButtonData type_btn_data)
@@ -431,6 +444,7 @@ public class FreeSkillSelect : MonoBehaviour
 			FreeSkillSelect.ButtonData buttonData = new FreeSkillSelect.ButtonData();
 			buttonData.children_list = new List<FreeSkillSelect.ButtonData>();
 			buttonData.name = list2[i].Value;
+			buttonData.nameTerm = "SceneYotogi/スキル所属/" + buttonData.name;
 			buttonData.condition_type = list2[i].Key;
 			list.Add(buttonData);
 			type_data_dic.Add(buttonData.condition_type, new KeyValuePair<FreeSkillSelect.ButtonData, Dictionary<string, FreeSkillSelect.ButtonData>>(buttonData, new Dictionary<string, FreeSkillSelect.ButtonData>()));
@@ -445,6 +459,7 @@ public class FreeSkillSelect : MonoBehaviour
 				FreeSkillSelect.ButtonData buttonData4 = buttonData3;
 				Yotogi.Category category = (Yotogi.Category)k;
 				buttonData4.name = category.ToString();
+				buttonData3.nameTerm = "SceneYotogi/スキルカテゴリー/" + buttonData3.name;
 				buttonData3.parent = buttonData2;
 				buttonData2.children_list.Add(buttonData3);
 				type_data_dic[list[j].condition_type].Value.Add(buttonData3.name, buttonData3);
@@ -456,23 +471,26 @@ public class FreeSkillSelect : MonoBehaviour
 		for (int l = 0; l < keyArray.Length; l++)
 		{
 			Skill.Data data = Skill.Get(keyArray[l]);
-			bool flag = false;
-			foreach (int item in data.playable_stageid_list)
+			if (data.specialConditionType != Skill.Data.SpecialConditionType.NewType)
 			{
-				flag = selectableStageIds.Contains(item);
-				if (flag)
+				bool flag = false;
+				foreach (int item in data.playable_stageid_list)
 				{
-					break;
+					flag = selectableStageIds.Contains(item);
+					if (flag)
+					{
+						break;
+					}
 				}
-			}
-			if (flag)
-			{
-				int category2 = (int)data.category;
-				if (!dictionary.ContainsKey(category2))
+				if (flag)
 				{
-					dictionary.Add(category2, new List<Skill.Data>());
+					int category2 = (int)data.category;
+					if (!dictionary.ContainsKey(category2))
+					{
+						dictionary.Add(category2, new List<Skill.Data>());
+					}
+					dictionary[category2].Add(data);
 				}
-				dictionary[category2].Add(data);
 			}
 		}
 		foreach (KeyValuePair<int, List<Skill.Data>> keyValuePair in dictionary)
@@ -608,6 +626,8 @@ public class FreeSkillSelect : MonoBehaviour
 
 		public string name;
 
+		public string nameTerm;
+
 		public Skill.Data skill_data;
 
 		public Skill.Data.SpecialConditionType condition_type;

+ 5 - 2
Assembly-CSharp/FullBodyIKCtrl.cs

@@ -242,6 +242,7 @@ public class FullBodyIKCtrl : MonoBehaviour
 				this.m_IKBoneDic[IKManager.BoneType.Spine2].Value.transform
 			};
 		}
+		this.m_SpineLength = (this.m_FullbodyIK.references.spine[0].position - this.m_FullbodyIK.references.spine[1].position).magnitude;
 		this.m_FullbodyIK.references.head = this.GetIKBone(IKManager.BoneType.Head);
 		this.m_FullbodyIK.references.leftUpperArm = this.GetIKBone(IKManager.BoneType.UpperArm_L);
 		this.m_FullbodyIK.references.leftForearm = this.GetIKBone(IKManager.BoneType.Forearm_L);
@@ -334,9 +335,9 @@ public class FullBodyIKCtrl : MonoBehaviour
 		flag |= (this.BodyEffector.positionWeight == 1f);
 		if (flag)
 		{
-			Vector3 position = this.m_FullbodyIK.references.spine[0].InverseTransformPoint(this.m_FullbodyIK.references.spine[1].position);
+			Vector3 normalized = this.m_FullbodyIK.references.spine[0].InverseTransformPoint(this.m_FullbodyIK.references.spine[1].position).normalized;
 			this.m_FullbodyIK.solver.Update();
-			this.m_FullbodyIK.references.spine[1].position = this.m_FullbodyIK.references.spine[0].TransformPoint(position);
+			this.m_FullbodyIK.references.spine[1].position = this.m_FullbodyIK.references.spine[0].TransformPoint(normalized * this.m_SpineLength);
 		}
 		foreach (IKCtrlData ikctrlData in this.m_strIKDataPair.Values)
 		{
@@ -693,4 +694,6 @@ public class FullBodyIKCtrl : MonoBehaviour
 	public bool AllForceIK;
 
 	public float BlendTime = 0.5f;
+
+	private float m_SpineLength;
 }

+ 23 - 2
Assembly-CSharp/GameInShopMain.cs

@@ -3,6 +3,7 @@ using System.Collections;
 using System.Collections.Generic;
 using System.IO;
 using System.Text;
+using I2.Loc;
 using PlayerStatus;
 using UnityEngine;
 using wf;
@@ -56,7 +57,26 @@ public class GameInShopMain : WfScreenChildren
 		{
 			GameObject gameObject = Utility.CreatePrefab(parent, "SceneShop/Prefab/CategoryButton", true);
 			gameObject.name = name;
-			UTY.GetChildObject(gameObject, "Label", false).GetComponent<UILabel>().text = gameObject.name;
+			UILabel component = UTY.GetChildObject(gameObject, "Label", false).GetComponent<UILabel>();
+			component.text = gameObject.name;
+			Localize component2 = component.GetComponent<Localize>();
+			if (GameUty.supportMultiLanguage && component2 != null)
+			{
+				string[] array = new string[]
+				{
+					"SceneShop/メインカテゴリー/",
+					"SceneShop/サブカテゴリー/",
+					"SceneEdit/カテゴリー/サブ/"
+				};
+				foreach (string str in array)
+				{
+					if (LocalizationManager.ContainsTerm(str + gameObject.name))
+					{
+						component2.SetTerm(str + gameObject.name);
+						break;
+					}
+				}
+			}
 			return UTY.GetChildObject(gameObject, "Button", false).GetComponent<UIButton>();
 		};
 		for (int k = 0; k < Shop.category_name_list.Count; k++)
@@ -623,7 +643,8 @@ public class GameInShopMain : WfScreenChildren
 			this.backup_maid_prop_.Add(this.CreateData(maid, MPN.lip));
 			this.backup_maid_prop_.Add(this.CreateData(maid, MPN.eye));
 			this.backup_maid_prop_.Add(this.CreateData(maid, MPN.eye_hi));
-			for (int i = 53; i <= 82; i++)
+			this.backup_maid_prop_.Add(this.CreateData(maid, MPN.eye_hi_r));
+			for (int i = 67; i <= 96; i++)
 			{
 				this.backup_maid_prop_.Add(this.CreateData(maid, (MPN)i));
 			}

+ 5 - 3
Assembly-CSharp/GameMain.cs

@@ -678,7 +678,7 @@ public class GameMain : MonoSingleton<GameMain>
 		serializeHeader.nMaidNum = this.m_CharacterMgr.GetStockMaidCount();
 		serializeHeader.strComment = f_strComment;
 		binaryWriter.Write("COM3D2_SAVE");
-		binaryWriter.Write(1210);
+		binaryWriter.Write(1230);
 		this.SerializeWriteHeader(binaryWriter, serializeHeader);
 		binaryWriter.Write("bookmark_kk_01");
 		GameMain.BinaryBookmark binaryBookmark = new GameMain.BinaryBookmark(binaryWriter);
@@ -709,6 +709,8 @@ public class GameMain : MonoSingleton<GameMain>
 		DeskManager.SerializeSingleSaveData(binaryWriter);
 		this.m_ScenarioSelectMgr.Serialize(binaryWriter);
 		this.m_FacilityMgr.Serialize(binaryWriter);
+		this.m_LifeModeMgr.Serialize(binaryWriter);
+		GameModeManager.Serialize(binaryWriter);
 		binaryBookmark.WriteBinaryLength(binaryWriter);
 		this.m_KasizukiMgr.Serialize(binaryWriter);
 		binaryBookmark2.WriteBinaryLength(binaryWriter);
@@ -792,7 +794,7 @@ public class GameMain : MonoSingleton<GameMain>
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("COM3D2_SAVE");
-		binaryWriter.Write(1210);
+		binaryWriter.Write(1230);
 		this.SerializeWriteHeader(binaryWriter, saveDataHeader);
 		binaryWriter.Write(array, (int)saveDataHeader.lHeaderSize, (int)((long)array.Length - saveDataHeader.lHeaderSize));
 		File.WriteAllBytes(path, memoryStream.ToArray());
@@ -1300,7 +1302,7 @@ public class GameMain : MonoSingleton<GameMain>
 		}
 		else
 		{
-			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/終了しますか?", SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.OnToEnd), new SystemDialog.OnClick(this.OnCancel));
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/終了しますか?", null, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.OnToEnd), new SystemDialog.OnClick(this.OnCancel));
 		}
 	}
 

+ 3 - 3
Assembly-CSharp/GameModeManager.cs

@@ -31,7 +31,7 @@ public static class GameModeManager
 	public static bool Serialize(BinaryWriter brWrite)
 	{
 		brWrite.Write("CM3D21_GAME_MODE_MGR");
-		brWrite.Write(1210);
+		brWrite.Write(1230);
 		brWrite.Write(1);
 		brWrite.Write((int)GameModeManager.m_NowGameModeType);
 		return true;
@@ -77,11 +77,11 @@ public static class GameModeManager
 	{
 		{
 			GameModeManager.Type.Normal,
-			new GameModeManager.Data(GameModeManager.Type.Normal, "main_banner_dammy", "今までどおりのゲーム進行モード。")
+			new GameModeManager.Data(GameModeManager.Type.Normal, "main_banner_um", "従来のモード\nメイドのスケジュールを設定することで、仕事、育成、夜伽を行う事のできる従来のモード\u3000")
 		},
 		{
 			GameModeManager.Type.LifeMode,
-			new GameModeManager.Data(GameModeManager.Type.LifeMode, "main_banner_dammy", "ライフモード。")
+			new GameModeManager.Data(GameModeManager.Type.LifeMode, "main_banner_elm", "ライフモード\nメイド達が普段どのような風に\n生活、仕事をしているのかを見ることが出来るモード\n普段は見ることのできない一面や、メイド同士の珍しいやり取りが見れるかも?")
 		}
 	};
 

+ 4 - 4
Assembly-CSharp/GameObjectExtension.cs

@@ -15,11 +15,11 @@ public static class GameObjectExtension
 
 	public static T GetOrAddComponent<T>(this Component self) where T : Component
 	{
-		T component = self.GetComponent<T>();
-		if (component == null)
+		T t = self.GetComponent<T>();
+		if (t == null)
 		{
-			component.gameObject.AddComponent<T>();
+			t = self.gameObject.AddComponent<T>();
 		}
-		return component;
+		return t;
 	}
 }

+ 30 - 15
Assembly-CSharp/GameUty.cs

@@ -42,6 +42,14 @@ public class GameUty
 		}
 	}
 
+	public static bool supportMultiLanguage
+	{
+		get
+		{
+			return false;
+		}
+	}
+
 	public static string[] MenuFiles
 	{
 		get
@@ -697,30 +705,37 @@ public class GameUty
 				}
 			}
 		}
-		list = GameUty.m_FileSystem.GetList("languagesource", AFileSystemBase.ListType.AllFile);
-		if (list != null && 0 < list.Length)
+		if (GameUty.supportMultiLanguage)
 		{
-			foreach (string path2 in list)
+			list = GameUty.m_FileSystem.GetList("languagesource", AFileSystemBase.ListType.AllFile);
+			if (list != null && 0 < list.Length)
 			{
-				string fileName2 = Path.GetFileName(path2);
-				if (!(Path.GetExtension(fileName2) != ".asset_language"))
+				foreach (string path2 in list)
 				{
-					if (!(fileName2 == "parts.asset_language"))
+					string fileName2 = Path.GetFileName(path2);
+					if (!(Path.GetExtension(fileName2) != ".asset_language"))
 					{
-						using (AFileBase afileBase = GameUty.m_FileSystem.FileOpen(fileName2))
+						if (GameUty.supportMultiLanguage || (!(fileName2 == "parts.asset_language") && !(fileName2 == "yotogi.asset_language")))
 						{
-							AssetBundle assetBundle = AssetBundle.LoadFromMemory(afileBase.ReadAll());
-							LanguageSource languageSource = UnityEngine.Object.Instantiate<LanguageSource>(assetBundle.LoadAllAssets<GameObject>()[0].GetComponent<LanguageSource>());
-							if (GameMain.Instance.transform.Find("Language") == null)
+							using (AFileBase afileBase = GameUty.m_FileSystem.FileOpen(fileName2))
 							{
-								new GameObject("Language").transform.SetParent(GameMain.Instance.transform);
+								AssetBundle assetBundle = AssetBundle.LoadFromMemory(afileBase.ReadAll());
+								LanguageSource languageSource = UnityEngine.Object.Instantiate<LanguageSource>(assetBundle.LoadAllAssets<GameObject>()[0].GetComponent<LanguageSource>());
+								if (GameMain.Instance.transform.Find("Language") == null)
+								{
+									new GameObject("Language").transform.SetParent(GameMain.Instance.transform);
+								}
+								languageSource.transform.SetParent(GameMain.Instance.transform.Find("Language"));
+								assetBundle.Unload(true);
 							}
-							languageSource.transform.SetParent(GameMain.Instance.transform.Find("Language"));
-							assetBundle.Unload(true);
 						}
 					}
 				}
 			}
+			foreach (LanguageSource languageSource2 in LocalizationManager.Sources)
+			{
+				languageSource2.LoadAllLanguages(false);
+			}
 		}
 		if (Directory.Exists(fullPath + "Mod"))
 		{
@@ -963,14 +978,14 @@ public class GameUty
 
 	public static string GetBuildVersionText()
 	{
-		int num = 1210;
+		int num = 1230;
 		return (num >= 1000) ? ((float)num / 1000f).ToString("F2") : ((float)num / 100f).ToString("F2");
 	}
 
 	public static string GetGameVersionText()
 	{
 		string text = "COM3D2x64.exe";
-		int num = 1210;
+		int num = 1230;
 		string path = Path.GetFullPath(".\\") + "update.lst";
 		string[] array = new string[0];
 		if (File.Exists(path))

+ 1 - 1
Assembly-CSharp/GravityControlWindow.cs

@@ -89,7 +89,7 @@ public class GravityControlWindow : BaseMaidPhotoWindow
 				transform = transform.transform.GetChild(0);
 			}
 			GravityTransformControl gravityTransformControl = transform.gameObject.AddComponent<GravityTransformControl>();
-			gravityTransformControl.transTargetObject = new PhotoTransTargetObject(transform.gameObject, text, PhotoTransTargetObject.Type.Prefab, Vector2.one);
+			gravityTransformControl.transTargetObject = new PhotoTransTargetObject(transform.gameObject, text, string.Empty, PhotoTransTargetObject.Type.Prefab, Vector2.one);
 			gravityTransformControl.SetTargetSlods(gravityData.slotIds);
 			gravityTransformControl.forceRate = gravityData.forceRate;
 			dictionary.Add(gravityData.categoryName, gravityTransformControl);

+ 2 - 2
Assembly-CSharp/HandSignShortcut.cs

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

+ 34 - 29
Assembly-CSharp/HideScroll.cs

@@ -24,35 +24,7 @@ public class HideScroll : MonoBehaviour
 		NDebug.Assert(this.event_trigger_ != null, "UIEventTriggerコンポーネントがありません");
 		EventDelegate.Add(this.event_trigger_.onHoverOver, new EventDelegate.Callback(this.OnHoverOver));
 		EventDelegate.Add(this.event_trigger_.onClick, new EventDelegate.Callback(this.OnClick));
-		Vector4 baseClipRegion = this.TargetPanel.baseClipRegion;
-		this.clipping_size_ = new Vector2(this.TargetPanel.baseClipRegion.z, this.TargetPanel.baseClipRegion.w);
-		this.clipping_offset_ = this.TargetPanel.clipOffset;
-		this.move_pos_ = this.clipping_size_;
-		Vector2 vector = new Vector2(this.TargetPanel.baseClipRegion.x, this.TargetPanel.baseClipRegion.y);
-		NDebug.Assert(vector.x == 0f && vector.y == 0f, "UIパネルのクリッピングのセンター設定は使えません");
-		if (this.Movement == HideScroll.MoveType.HorizontalRigt)
-		{
-			this.move_pos_.y = 0f;
-		}
-		else if (this.Movement == HideScroll.MoveType.HorizontalLeft)
-		{
-			this.move_pos_.y = 0f;
-			this.move_pos_.x = this.move_pos_.x * -1f;
-		}
-		else if (this.Movement == HideScroll.MoveType.VerticalTop)
-		{
-			this.move_pos_.x = 0f;
-			this.move_pos_.y = this.move_pos_.y * -1f;
-		}
-		else if (this.Movement == HideScroll.MoveType.VerticalBottom)
-		{
-			this.move_pos_.x = 0f;
-		}
-		int num = 2;
-		this.retention_rect_.x = (this.clipping_size_.x / 2f - this.clipping_offset_.x) * -1f - (float)num;
-		this.retention_rect_.y = this.clipping_size_.y / 2f + this.clipping_offset_.y - this.clipping_size_.y - (float)num;
-		this.retention_rect_.width = this.clipping_size_.x + (float)(num * 2);
-		this.retention_rect_.height = this.clipping_size_.y + (float)(num * 2);
+		this.UpdatePanelData();
 		this.SetPanelFix(true);
 		if (this.panel_fixed_)
 		{
@@ -107,6 +79,39 @@ public class HideScroll : MonoBehaviour
 		GameMain.Instance.CMSystem.SetSystemVers(this.GetFlagName(), f_strVal);
 	}
 
+	public void UpdatePanelData()
+	{
+		Vector4 baseClipRegion = this.TargetPanel.baseClipRegion;
+		this.clipping_size_ = new Vector2(this.TargetPanel.baseClipRegion.z, this.TargetPanel.baseClipRegion.w);
+		this.clipping_offset_ = this.TargetPanel.clipOffset;
+		this.move_pos_ = this.clipping_size_;
+		Vector2 vector = new Vector2(this.TargetPanel.baseClipRegion.x, this.TargetPanel.baseClipRegion.y);
+		NDebug.Assert(vector.x == 0f && vector.y == 0f, "UIパネルのクリッピングのセンター設定は使えません");
+		if (this.Movement == HideScroll.MoveType.HorizontalRigt)
+		{
+			this.move_pos_.y = 0f;
+		}
+		else if (this.Movement == HideScroll.MoveType.HorizontalLeft)
+		{
+			this.move_pos_.y = 0f;
+			this.move_pos_.x = this.move_pos_.x * -1f;
+		}
+		else if (this.Movement == HideScroll.MoveType.VerticalTop)
+		{
+			this.move_pos_.x = 0f;
+			this.move_pos_.y = this.move_pos_.y * -1f;
+		}
+		else if (this.Movement == HideScroll.MoveType.VerticalBottom)
+		{
+			this.move_pos_.x = 0f;
+		}
+		int num = 2;
+		this.retention_rect_.x = (this.clipping_size_.x / 2f - this.clipping_offset_.x) * -1f - (float)num;
+		this.retention_rect_.y = this.clipping_size_.y / 2f + this.clipping_offset_.y - this.clipping_size_.y - (float)num;
+		this.retention_rect_.width = this.clipping_size_.x + (float)(num * 2);
+		this.retention_rect_.height = this.clipping_size_.y + (float)(num * 2);
+	}
+
 	private void UpdatePanelPos()
 	{
 		if (!GameMain.Instance.VRMode && this.ParentObject != null)

+ 19 - 0
Assembly-CSharp/I2/Loc/LocalizationManager.cs

@@ -986,6 +986,25 @@ namespace I2.Loc
 			return null;
 		}
 
+		public static bool ContainsTerm(string term)
+		{
+			if (LocalizationManager.Sources.Count == 0)
+			{
+				LocalizationManager.UpdateSources();
+			}
+			int i = 0;
+			int count = LocalizationManager.Sources.Count;
+			while (i < count)
+			{
+				if (LocalizationManager.Sources[i].ContainsTerm(term))
+				{
+					return true;
+				}
+				i++;
+			}
+			return false;
+		}
+
 		private static string mCurrentLanguage;
 
 		private static string mLanguageCode;

+ 7 - 0
Assembly-CSharp/I2/Loc/LocalizationReader.cs

@@ -145,6 +145,13 @@ namespace I2.Loc
 			{
 				LocalizationReader.AddCSVtoken(ref list, ref Line, iStart, ref num);
 			}
+			for (int i = 0; i < list.Count; i++)
+			{
+				if (0 <= list[i].IndexOf("\\n"))
+				{
+					list[i] = list[i].Replace("\\n", "\n");
+				}
+			}
 			return list.ToArray();
 		}
 

+ 44 - 0
Assembly-CSharp/I2/Loc/Localize.cs

@@ -34,6 +34,18 @@ namespace I2.Loc
 			}
 		}
 
+		public Localize.ArgsPair[] TermArgs
+		{
+			get
+			{
+				return this.mTermArgs;
+			}
+			set
+			{
+				this.mTermArgs = value;
+			}
+		}
+
 		private void Awake()
 		{
 			this.UpdateAssetDictionary();
@@ -395,6 +407,8 @@ namespace I2.Loc
 
 		public string mTermSecondary = string.Empty;
 
+		public Localize.ArgsPair[] mTermArgs;
+
 		[NonSerialized]
 		public string FinalTerm;
 
@@ -421,6 +435,10 @@ namespace I2.Loc
 
 		public bool CorrectAlignmentForRTL = true;
 
+		public bool ForceOverFlowShrink = true;
+
+		public bool NotAdjustScale;
+
 		public bool AddSpacesToJoinedLanguages;
 
 		public List<UnityEngine.Object> TranslatedObjects = new List<UnityEngine.Object>();
@@ -455,6 +473,32 @@ namespace I2.Loc
 
 		public string mLocalizeTargetName;
 
+		[Serializable]
+		public struct ArgsPair
+		{
+			public static Localize.ArgsPair Create(string setText)
+			{
+				return new Localize.ArgsPair
+				{
+					text = setText,
+					isTerm = false
+				};
+			}
+
+			public static Localize.ArgsPair Create(string setText, bool setIsTerm)
+			{
+				return new Localize.ArgsPair
+				{
+					text = setText,
+					isTerm = setIsTerm
+				};
+			}
+
+			public string text;
+
+			public bool isTerm;
+		}
+
 		public enum TermModification
 		{
 			DontModify,

+ 35 - 3
Assembly-CSharp/I2/Loc/LocalizeTarget_NGUI_Label.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Generic;
 using UnityEngine;
 
 namespace I2.Loc
@@ -100,11 +101,42 @@ namespace I2.Loc
 				{
 					this.mTarget.alignment = ((!LocalizationManager.IsRight2Left) ? this.mAlignment_LTR : this.mAlignment_RTL);
 				}
-				if (((!this.mTarget.useFloatSpacing && (this.mTarget.spacingX != 0 || this.mTarget.spacingY != 0)) || (this.mTarget.useFloatSpacing && (this.mTarget.floatSpacingX != 0f || this.mTarget.floatSpacingY != 0f))) && cmp.GetComponent<NGUILabelSpacingHold>() == null)
+				if (((!this.mTarget.useFloatSpacing && (this.mTarget.spacingX != 0 || this.mTarget.spacingY != 0)) || (this.mTarget.useFloatSpacing && (this.mTarget.floatSpacingX != 0f || this.mTarget.floatSpacingY != 0f))) && cmp.gameObject.GetComponent<NGUILabelLocalizeSupport>() == null)
 				{
-					cmp.gameObject.AddComponent<NGUILabelSpacingHold>();
+					NGUILabelLocalizeSupport nguilabelLocalizeSupport = cmp.gameObject.AddComponent<NGUILabelLocalizeSupport>();
+					if (!cmp.ForceOverFlowShrink)
+					{
+						nguilabelLocalizeSupport.overRidePropertys.overFlow.enabled = false;
+					}
+				}
+				if (cmp.ForceOverFlowShrink && cmp.gameObject.GetComponent<NGUILabelLocalizeSupport>() == null)
+				{
+					cmp.gameObject.AddComponent<NGUILabelLocalizeSupport>();
+				}
+				if (!string.IsNullOrEmpty(mainTranslation) && cmp.mTermArgs != null && 0 < cmp.mTermArgs.Length)
+				{
+					List<string> list = new List<string>();
+					for (int i = 0; i < cmp.mTermArgs.Length; i++)
+					{
+						string text = cmp.mTermArgs[i].text;
+						if (!cmp.mTermArgs[i].isTerm)
+						{
+							if (text.IndexOf('{') != -1 && text.IndexOf('}') != -1)
+							{
+								mainTranslation += text;
+							}
+							else
+							{
+								list.Add(text);
+							}
+						}
+						else
+						{
+							list.Add((text == null) ? string.Empty : LocalizationManager.GetTranslation(text, false, 0, true, false, null, null));
+						}
+					}
+					mainTranslation = string.Format(mainTranslation, list.ToArray());
 				}
-				this.mTarget.overflowMethod = UILabel.Overflow.ShrinkContent;
 				this.mTarget.text = mainTranslation;
 			}
 		}

+ 1 - 1
Assembly-CSharp/I2/Loc/LocalizeTarget_NGUI_Sprite.cs

@@ -69,7 +69,7 @@ namespace I2.Loc
 				this.mTarget.spriteName = mainTranslation;
 				flag = true;
 			}
-			if (flag)
+			if (flag && !cmp.NotAdjustScale)
 			{
 				this.mTarget.MakePixelPerfect();
 			}

+ 25 - 0
Assembly-CSharp/I2/Loc/LocalizeTarget_UnityUI_Text.cs

@@ -1,4 +1,5 @@
 using System;
+using System.Collections.Generic;
 using UnityEngine;
 using UnityEngine.UI;
 
@@ -83,6 +84,30 @@ namespace I2.Loc
 				{
 					this.mTarget.alignment = ((!LocalizationManager.IsRight2Left) ? this.mAlignment_LTR : this.mAlignment_RTL);
 				}
+				if (!string.IsNullOrEmpty(mainTranslation) && cmp.mTermArgs != null && 0 < cmp.mTermArgs.Length)
+				{
+					List<string> list = new List<string>();
+					for (int i = 0; i < cmp.mTermArgs.Length; i++)
+					{
+						string text = cmp.mTermArgs[i].text;
+						if (!cmp.mTermArgs[i].isTerm)
+						{
+							if (text.IndexOf('{') != -1 && text.IndexOf('}') != -1)
+							{
+								mainTranslation += text;
+							}
+							else
+							{
+								list.Add(text);
+							}
+						}
+						else
+						{
+							list.Add((text == null) ? string.Empty : LocalizationManager.GetTranslation(text, false, 0, true, false, null, null));
+						}
+					}
+					mainTranslation = string.Format(mainTranslation, list.ToArray());
+				}
 				this.mTarget.text = mainTranslation;
 				this.mTarget.SetVerticesDirty();
 			}

+ 1 - 1
Assembly-CSharp/InfinityColorTextureCache.cs

@@ -31,7 +31,7 @@ public class InfinityColorTextureCache
 		InfinityColorTextureCache.render_cache_.Update();
 	}
 
-	public void AddTexture(int mat_no, string prop_name, Texture base_tex)
+	private void AddTexture(int mat_no, string prop_name, Texture base_tex)
 	{
 		if (base_tex == null)
 		{

+ 18 - 0
Assembly-CSharp/KaraokeDataManager.cs

@@ -277,6 +277,18 @@ public class KaraokeDataManager : MonoBehaviour
 			"Majime",
 			"Rindere"
 		};
+		if (GameMain.Instance.CMSystem.GetTmpGenericFlag("Silent_KARAOKE") == 1)
+		{
+			list.Add("Silent");
+		}
+		if (GameMain.Instance.CMSystem.GetTmpGenericFlag("Devilish_KARAOKE") == 1)
+		{
+			list.Add("Devilish");
+		}
+		if (GameMain.Instance.CMSystem.GetTmpGenericFlag("Ladylike_KARAOKE") == 1)
+		{
+			list.Add("Ladylike");
+		}
 		List<Maid> list2 = new List<Maid>();
 		List<Maid> list3 = new List<Maid>();
 		CharacterSelectManager.DefaultMaidList(list3);
@@ -707,6 +719,12 @@ public class KaraokeDataManager : MonoBehaviour
 
 	public const string STR_MAID_ADD_CALL_FLAG = "カラオケメイド追加";
 
+	public const string STR_PERSONAL_SILENT_ENABLED_FLAG = "Silent_KARAOKE";
+
+	public const string STR_PERSONAL_DEVILISH_ENABLED_FLAG = "Devilish_KARAOKE";
+
+	public const string STR_PERSONAL_LADYLIKE_ENABLED_FLAG = "Ladylike_KARAOKE";
+
 	private Dictionary<int, KaraokeDataManager.MusicData> m_MusicDataArray = new Dictionary<int, KaraokeDataManager.MusicData>();
 
 	private Dictionary<int, KaraokeDataManager.BackgroundData> m_BackgroundDataArray = new Dictionary<int, KaraokeDataManager.BackgroundData>();

+ 8 - 4
Assembly-CSharp/Kasizuki/KasizukiManager.cs

@@ -396,6 +396,10 @@ namespace Kasizuki
 
 		public void SetNowManType(int manTypeID)
 		{
+			if (GameMain.Instance.CharacterMgr.status.lockNTRPlay)
+			{
+				manTypeID = 10;
+			}
 			ManData.Data data = ManData.GetData(manTypeID);
 			if (ManData.IsEnabled(manTypeID))
 			{
@@ -447,7 +451,7 @@ namespace Kasizuki
 			PlayerStatus.Status status = GameMain.Instance.CharacterMgr.status;
 			target.status.lastName = this.m_CachedOriginPlayerName;
 			status.playerName = this.m_CachedOriginPlayerName;
-			for (int i = 0; i < 99; i++)
+			for (int i = 0; i < 114; i++)
 			{
 				MPN mpn = (MPN)i;
 				if (mpn != MPN.null_mpn)
@@ -464,7 +468,7 @@ namespace Kasizuki
 		{
 			this.m_CachedOriginPlayerDataDic = new Dictionary<MPN, MaidProp>();
 			Maid man = GameMain.Instance.CharacterMgr.GetMan(0);
-			for (int i = 0; i < 99; i++)
+			for (int i = 0; i < 114; i++)
 			{
 				MPN mpn = (MPN)i;
 				MaidProp maidProp = new MaidProp();
@@ -804,7 +808,7 @@ namespace Kasizuki
 		public void Serialize(BinaryWriter bw)
 		{
 			bw.Write("COM3D2_KASIZUKI");
-			bw.Write(1210);
+			bw.Write(1230);
 			this.SerializeOriginHeader(bw);
 			foreach (KeyValuePair<int, KasizukiManager.SaveData> keyValuePair in this.m_SaveDataArray)
 			{
@@ -919,7 +923,6 @@ namespace Kasizuki
 			{
 				using (BinaryReader binaryReader = new BinaryReader(memoryStream))
 				{
-					this.SetNowManType(saveData.header.lastManType);
 					DataArray<string, string> systemData = this.m_SystemData;
 					BinaryReader brRead = binaryReader;
 					if (KasizukiManager.<>f__mg$cache4 == null)
@@ -932,6 +935,7 @@ namespace Kasizuki
 						KasizukiManager.<>f__mg$cache5 = new Func<BinaryReader, string>(Util.ToString);
 					}
 					systemData.Deserialize(brRead, func_read_key, KasizukiManager.<>f__mg$cache5);
+					this.SetNowManType(saveData.header.lastManType);
 					int num = binaryReader.ReadInt32();
 					for (int i = 0; i < num; i++)
 					{

+ 6 - 2
Assembly-CSharp/Kasizuki/KasizukiSaveAndLoadCtrl.cs

@@ -260,8 +260,12 @@ namespace Kasizuki
 			{
 				dataUnit.content.SetActive(true);
 				dataUnit.newLabel.SetActive(GameMain.Instance.KasizukiMgr.LatestSaveDataNumber == header.saveDataNumber);
-				int lastManType = header.lastManType;
-				ManData.Data data = ManData.GetData(lastManType);
+				int id = header.lastManType;
+				if (GameMain.Instance.CharacterMgr.status.lockNTRPlay)
+				{
+					id = 10;
+				}
+				ManData.Data data = ManData.GetData(id);
 				dataUnit.labelDate.text = header.GetDateTime().ToString("yyyy.MM.dd HH:mm");
 				dataUnit.labelMaidCount.text = KasizukiManager.GetEnableMaidList().Count.ToString();
 				dataUnit.labelManName.text = data.drawName;

+ 1 - 1
Assembly-CSharp/LifeModeChangeWindow.cs

@@ -134,12 +134,12 @@ public class LifeModeChangeWindow : MonoBehaviour
 
 	public void CloseWindow()
 	{
+		this.SetNowGameMode();
 		if (this.m_CallbackCloseWindow != null)
 		{
 			this.m_CallbackCloseWindow();
 			this.m_CallbackCloseWindow = null;
 		}
-		this.SetNowGameMode();
 		this.uGUICanvasFade.interactable = false;
 		this.uGUICanvasFade.FadeOut(0.3f, delegate
 		{

+ 35 - 18
Assembly-CSharp/LightWindow.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using wf;
 
@@ -17,7 +18,7 @@ public class LightWindow : BaseMaidPhotoWindow
 		this.cameraMoveSupport = base.gameObject.AddComponent<WfCameraMoveSupport>();
 		EventDelegate.Add(this.cameraFocusBtn.onClick, new EventDelegate.Callback(this.OnClickCameraFocus));
 		this.scrollView = NGUITools.FindInParents<UIScrollView>(this.contentGrid.transform);
-		this.targetList.Add(new PhotoTransTargetObject(null, "メインライト", PhotoTransTargetObject.Type.Maid, Vector2.one));
+		this.targetList.Add(new PhotoTransTargetObject(null, "メインライト", "ScenePhotoMode/ライト/メインライト", PhotoTransTargetObject.Type.Maid, Vector2.one));
 		this.CreateTabButton(this.contentGrid.gameObject, this.targetList[0]);
 		this.tabPanel.UpdateChildren();
 		this.tabPanel.Select(this.contentGrid.GetChild(0).gameObject.GetComponentInChildren<UIWFTabButton>());
@@ -29,10 +30,10 @@ public class LightWindow : BaseMaidPhotoWindow
 	public override void Start()
 	{
 		base.Start();
-		this.AddTransTargetObject(this.InstantiateLight(), "1 : ポイントライト", PhotoTransTargetObject.Type.Light);
-		this.AddTransTargetObject(this.InstantiateLight(), "2 : ポイントライト", PhotoTransTargetObject.Type.Light);
-		this.AddTransTargetObject(this.InstantiateLight(), "3 : ポイントライト", PhotoTransTargetObject.Type.Light);
-		this.AddTransTargetObject(this.InstantiateLight(), "4 : ポイントライト", PhotoTransTargetObject.Type.Light);
+		this.AddTransTargetObject(this.InstantiateLight(), "1 : ポイントライト", "ScenePhotoMode/ライト/1 : ポイントライト", PhotoTransTargetObject.Type.Light);
+		this.AddTransTargetObject(this.InstantiateLight(), "2 : ポイントライト", "ScenePhotoMode/ライト/2 : ポイントライト", PhotoTransTargetObject.Type.Light);
+		this.AddTransTargetObject(this.InstantiateLight(), "3 : ポイントライト", "ScenePhotoMode/ライト/3 : ポイントライト", PhotoTransTargetObject.Type.Light);
+		this.AddTransTargetObject(this.InstantiateLight(), "4 : ポイントライト", "ScenePhotoMode/ライト/4 : ポイントライト", PhotoTransTargetObject.Type.Light);
 		this.UpdateChildren();
 		this.DirectionalLightWindow.SetLightWindow(this);
 		this.DirectionalLightWindow.Init(new Action(this.UpdateButtonInfo));
@@ -105,7 +106,7 @@ public class LightWindow : BaseMaidPhotoWindow
 
 	public void OnClickAddButton()
 	{
-		this.AddTransTargetObject(this.InstantiateLight(), "◆", PhotoTransTargetObject.Type.Light);
+		this.AddTransTargetObject(this.InstantiateLight(), "◆", string.Empty, PhotoTransTargetObject.Type.Light);
 	}
 
 	public void OnClickRemoveButton()
@@ -263,37 +264,48 @@ public class LightWindow : BaseMaidPhotoWindow
 					if (componentInChildren != null && light.type != LightType.Directional)
 					{
 						string text = componentInChildren.text;
-						text = text.Replace("ポイントライト", "◆").Replace("スポットライト", "◆");
-						componentInChildren.text = text.Replace("◆", (light.type != LightType.Point) ? "スポットライト" : "ポイントライト");
+						Localize component = componentInChildren.GetComponent<Localize>();
+						if (component != null)
+						{
+							text = component.Term;
+							text = text.Replace("ポイントライト", "◆").Replace("スポットライト", "◆");
+							text = text.Replace("◆", (light.type != LightType.Point) ? "スポットライト" : "ポイントライト");
+							component.SetTerm(text);
+						}
+						else
+						{
+							text = text.Replace("ポイントライト", "◆").Replace("スポットライト", "◆");
+							componentInChildren.text = text.Replace("◆", (light.type != LightType.Point) ? "スポットライト" : "ポイントライト");
+						}
 					}
-					UISprite component = UTY.GetChildObject(transform.gameObject, "Plate/FrameThumbnail", false).GetComponent<UISprite>();
+					UISprite component2 = UTY.GetChildObject(transform.gameObject, "Plate/FrameThumbnail", false).GetComponent<UISprite>();
 					if (light.type == LightType.Directional)
 					{
-						component.spriteName = "photo_icon_light_d";
+						component2.spriteName = "photo_icon_light_d";
 					}
 					else if (light.type == LightType.Spot)
 					{
-						component.spriteName = "photo_icon_light_spot";
+						component2.spriteName = "photo_icon_light_spot";
 					}
 					else if (light.type == LightType.Point)
 					{
-						component.spriteName = "photo_icon_light_point";
+						component2.spriteName = "photo_icon_light_point";
 					}
 					Color color = light.color;
 					color.a = ((!light.enabled) ? 0.2f : 1f);
-					component.color = color;
+					component2.color = color;
 				}
 			}
 		}
 	}
 
-	public void AddTransTargetObject(GameObject target_obj, string draw_name, PhotoTransTargetObject.Type type)
+	public void AddTransTargetObject(GameObject target_obj, string draw_name, string termName, PhotoTransTargetObject.Type type)
 	{
 		if (target_obj == null)
 		{
 			return;
 		}
-		PhotoTransTargetObject photoTransTargetObject = new PhotoTransTargetObject(target_obj, draw_name, type, Vector2.one);
+		PhotoTransTargetObject photoTransTargetObject = new PhotoTransTargetObject(target_obj, draw_name, termName, type, Vector2.one);
 		this.targetList.Add(photoTransTargetObject);
 		UIWFTabButton uiwftabButton = this.CreateTabButton(this.contentGrid.gameObject, photoTransTargetObject);
 		UIEventTrigger[] componentsInChildren = uiwftabButton.gameObject.GetComponentsInChildren<UIEventTrigger>();
@@ -379,8 +391,13 @@ public class LightWindow : BaseMaidPhotoWindow
 		GameObject gameObject = Utility.CreatePrefab(parent_obj, "ScenePhotoMode/WindowsListItemLight", true);
 		gameObject.name = target.guid.ToString();
 		gameObject.GetComponentInChildren<UILabel>().text = target.draw_name;
-		UIWFTabButton componentInChildren = gameObject.GetComponentInChildren<UIWFTabButton>();
-		EventDelegate.Add(componentInChildren.onSelect, delegate()
+		Localize componentInChildren = gameObject.GetComponentInChildren<Localize>();
+		if (componentInChildren != null)
+		{
+			componentInChildren.SetTerm(target.nameTerm);
+		}
+		UIWFTabButton componentInChildren2 = gameObject.GetComponentInChildren<UIWFTabButton>();
+		EventDelegate.Add(componentInChildren2.onSelect, delegate()
 		{
 			if (!UIWFSelectButton.current.isSelected)
 			{
@@ -395,7 +412,7 @@ public class LightWindow : BaseMaidPhotoWindow
 				}
 			}
 		});
-		return componentInChildren;
+		return componentInChildren2;
 	}
 
 	private GameObject InstantiateLight()

+ 15 - 0
Assembly-CSharp/MPN.cs

@@ -22,9 +22,19 @@ public enum MPN
 	EyeBallPosY,
 	EyeBallSclX,
 	EyeBallSclY,
+	EarNone,
+	EarElf,
+	EarRot,
+	EarScl,
+	NosePos,
+	NoseScl,
 	FaceShape,
+	FaceShapeSlim,
+	MayuShapeIn,
+	MayuShapeOut,
 	MayuX,
 	MayuY,
+	MayuRot,
 	HeadX,
 	HeadY,
 	DouPer,
@@ -53,8 +63,12 @@ public enum MPN
 	lip,
 	eye,
 	eye_hi,
+	eye_hi_r,
 	chikubi,
 	chikubicolor,
+	eyewhite,
+	nose,
+	facegloss,
 	wear,
 	skirt,
 	mizugi,
@@ -93,6 +107,7 @@ public enum MPN
 	folder_mayu,
 	folder_underhair,
 	folder_skin,
+	folder_eyewhite,
 	kousoku_upper,
 	kousoku_lower,
 	seieki_naka,

+ 8 - 8
Assembly-CSharp/MPN_TYPE_RANGE.cs

@@ -3,14 +3,14 @@
 public enum MPN_TYPE_RANGE
 {
 	BODY_START = 1,
-	BODY_END = 52,
-	BODY_RELOAD_START = 34,
-	BODY_RELOAD_END = 86,
-	WEAR_START = 53,
-	WEAR_END = 82,
+	BODY_END = 66,
+	BODY_RELOAD_START = 44,
+	BODY_RELOAD_END = 100,
+	WEAR_START = 67,
+	WEAR_END = 96,
 	SET_START,
-	SET_END = 86,
+	SET_END = 100,
 	FOLDER_BODY_START,
-	FOLDER_BODY_END = 90,
-	MAX = 99
+	FOLDER_BODY_END = 105,
+	MAX = 114
 }

+ 221 - 53
Assembly-CSharp/Maid.cs

@@ -229,9 +229,19 @@ public class Maid : MonoBehaviour
 			Maid.CreateProp(0, 100, 50, MPN.EyeBallPosY, 2),
 			Maid.CreateProp(0, 100, 50, MPN.EyeBallSclX, 2),
 			Maid.CreateProp(0, 100, 50, MPN.EyeBallSclY, 2),
+			Maid.CreateProp(0, 1, 0, MPN.EarNone, 2),
+			Maid.CreateProp(0, 100, 0, MPN.EarElf, 2),
+			Maid.CreateProp(0, 100, 50, MPN.EarRot, 2),
+			Maid.CreateProp(0, 100, 50, MPN.EarScl, 2),
+			Maid.CreateProp(0, 100, 50, MPN.NosePos, 2),
+			Maid.CreateProp(0, 100, 50, MPN.NoseScl, 2),
 			Maid.CreateProp(0, 100, 0, MPN.FaceShape, 2),
+			Maid.CreateProp(0, 100, 0, MPN.FaceShapeSlim, 2),
+			Maid.CreateProp(0, 100, 50, MPN.MayuShapeIn, 2),
+			Maid.CreateProp(0, 100, 50, MPN.MayuShapeOut, 2),
 			Maid.CreateProp(0, 100, 50, MPN.MayuX, 2),
 			Maid.CreateProp(0, 100, 50, MPN.MayuY, 2),
+			Maid.CreateProp(0, 100, 50, MPN.MayuRot, 2),
 			Maid.CreateProp(0, 100, 50, MPN.HeadX, 2),
 			Maid.CreateProp(0, 100, 50, MPN.HeadY, 2),
 			Maid.CreateProp(20, 80, 50, MPN.DouPer, 2),
@@ -288,8 +298,12 @@ public class Maid : MonoBehaviour
 			Maid.CreateProp(string.Empty, MPN.lip, 3),
 			Maid.CreateProp(string.Empty, MPN.eye, 3),
 			Maid.CreateProp(string.Empty, MPN.eye_hi, 3),
+			Maid.CreateProp(string.Empty, MPN.eye_hi_r, 3),
 			Maid.CreateProp(string.Empty, MPN.chikubi, 3),
 			Maid.CreateProp(string.Empty, MPN.chikubicolor, 3),
+			Maid.CreateProp(string.Empty, MPN.eyewhite, 3),
+			Maid.CreateProp(string.Empty, MPN.nose, 3),
+			Maid.CreateProp(string.Empty, MPN.facegloss, 3),
 			Maid.CreateProp(string.Empty, MPN.moza, 3),
 			Maid.CreateProp(string.Empty, MPN.onepiece, 3),
 			Maid.CreateProp(string.Empty, MPN.set_maidwear, 3),
@@ -300,6 +314,7 @@ public class Maid : MonoBehaviour
 			Maid.CreateProp(string.Empty, MPN.folder_mayu, 3),
 			Maid.CreateProp(string.Empty, MPN.folder_underhair, 3),
 			Maid.CreateProp(string.Empty, MPN.folder_skin, 3),
+			Maid.CreateProp(string.Empty, MPN.folder_eyewhite, 3),
 			Maid.CreateProp(string.Empty, MPN.kousoku_upper, 3),
 			Maid.CreateProp(string.Empty, MPN.kousoku_lower, 3),
 			Maid.CreateProp(string.Empty, MPN.seieki_naka, 3),
@@ -519,7 +534,7 @@ public class Maid : MonoBehaviour
 		flag = (prop.m_dicTBodyAttachPos.Count != 0);
 		flag2 = (prop.m_dicMaterialProp.Count != 0);
 		flag3 = (prop.m_dicBoneLength.Count != 0);
-		if (mps.idx != 33)
+		if (mps.idx != 43)
 		{
 			this.SetProp((MPN)mps.idx, mps.strFileName, mps.nFileNameRID, false, false);
 		}
@@ -531,7 +546,7 @@ public class Maid : MonoBehaviour
 			{
 				prop2.m_dicTBodySkinPos[keyValuePair.Key] = new KeyValuePair<int, BoneAttachPos>(keyValuePair.Value.Key, new BoneAttachPos(keyValuePair.Value.Value));
 			}
-			if (mps.idx != 33)
+			if (mps.idx != 43)
 			{
 				prop2.boDut = true;
 			}
@@ -550,7 +565,7 @@ public class Maid : MonoBehaviour
 				}
 				prop3.m_dicTBodyAttachPos[keyValuePair2.Key] = dictionary;
 			}
-			if (mps.idx != 33)
+			if (mps.idx != 43)
 			{
 				prop3.boDut = true;
 			}
@@ -564,7 +579,7 @@ public class Maid : MonoBehaviour
 			{
 				prop4.m_dicMaterialProp[keyValuePair4.Key] = new KeyValuePair<int, MatPropSave>(keyValuePair4.Value.Key, new MatPropSave(keyValuePair4.Value.Value));
 			}
-			if (mps.idx != 33)
+			if (mps.idx != 43)
 			{
 				prop4.boDut = true;
 			}
@@ -583,7 +598,7 @@ public class Maid : MonoBehaviour
 				}
 				prop5.m_dicBoneLength[keyValuePair5.Key] = new KeyValuePair<int, Dictionary<string, float>>(keyValuePair5.Value.Key, dictionary2);
 			}
-			if (mps.idx != 33)
+			if (mps.idx != 43)
 			{
 				prop5.boDut = true;
 			}
@@ -612,7 +627,7 @@ public class Maid : MonoBehaviour
 		}
 		else
 		{
-			if (mp.strFileName != filename || mp.bSubDut || (83 <= mp.idx && mp.idx <= 86))
+			if (mp.strFileName != filename || mp.bSubDut || (97 <= mp.idx && mp.idx <= 100))
 			{
 				mp.boDut = true;
 			}
@@ -848,40 +863,62 @@ public class Maid : MonoBehaviour
 						this.body0.FixVisibleFlag(true);
 						this.boModelChg = true;
 					}
-					if (this.boMAN && maidProp.idx == 33)
+					if (this.boMAN && maidProp.idx == 43)
 					{
-						for (int i = 34; i <= 86; i++)
+						for (int i = 44; i <= 100; i++)
 						{
 							this.GetProp((MPN)i).boDut = true;
 						}
 						this.GetProp(MPN.moza).boDut = true;
 					}
-					else if (maidProp.idx == 40 || maidProp.idx == 36 || maidProp.idx == 37 || maidProp.idx == 39 || maidProp.idx == 38)
+					else if (maidProp.idx == 50 || maidProp.idx == 46 || maidProp.idx == 47 || maidProp.idx == 49 || maidProp.idx == 48)
 					{
 						this.GetProp(MPN.haircolor).boDut = true;
 					}
-					else if (maidProp.idx == 35)
+					else if (maidProp.idx == 45)
 					{
-						this.GetProp(MPN.skin).boDut = true;
-						this.GetProp(MPN.eye).boDut = true;
-						this.GetProp(MPN.mayu).boDut = true;
-						this.GetProp(MPN.eye_hi).boDut = true;
-						this.GetProp(MPN.EyeClose).boDut = true;
-						this.GetProp(MPN.FaceShape).boDut = true;
-						this.GetProp(MPN.MayuX).boDut = true;
-						this.GetProp(MPN.MayuY).boDut = true;
+						MPN[] array = new MPN[]
+						{
+							MPN.skin,
+							MPN.eye,
+							MPN.mayu,
+							MPN.eye_hi,
+							MPN.eye_hi_r,
+							MPN.EyeClose,
+							MPN.EarNone,
+							MPN.EarElf,
+							MPN.EarRot,
+							MPN.EarScl,
+							MPN.NosePos,
+							MPN.NoseScl,
+							MPN.FaceShape,
+							MPN.FaceShapeSlim,
+							MPN.MayuShapeIn,
+							MPN.MayuShapeOut,
+							MPN.MayuX,
+							MPN.MayuY,
+							MPN.MayuRot,
+							MPN.eye_hi_r,
+							MPN.eyewhite,
+							MPN.nose,
+							MPN.facegloss
+						};
+						foreach (MPN mpn in array)
+						{
+							this.GetProp(mpn).boDut = true;
+						}
 					}
-					else if (maidProp.idx == 42)
+					else if (maidProp.idx == 52)
 					{
 						MaidProp prop = this.GetProp(MPN.acctatoo);
 						prop.boDut = true;
 						if (prop.listSubProp != null)
 						{
-							for (int j = 0; j < prop.listSubProp.Count; j++)
+							for (int k = 0; k < prop.listSubProp.Count; k++)
 							{
-								if (prop.listSubProp[j] != null)
+								if (prop.listSubProp[k] != null)
 								{
-									prop.listSubProp[j].bDut = true;
+									prop.listSubProp[k].bDut = true;
 								}
 							}
 						}
@@ -889,11 +926,11 @@ public class Maid : MonoBehaviour
 						prop.boDut = true;
 						if (prop.listSubProp != null)
 						{
-							for (int k = 0; k < prop.listSubProp.Count; k++)
+							for (int l = 0; l < prop.listSubProp.Count; l++)
 							{
-								if (prop.listSubProp[k] != null)
+								if (prop.listSubProp[l] != null)
 								{
-									prop.listSubProp[k].bDut = true;
+									prop.listSubProp[l].bDut = true;
 								}
 							}
 						}
@@ -965,40 +1002,62 @@ public class Maid : MonoBehaviour
 						this.body0.FixVisibleFlag(true);
 						this.boModelChg = true;
 					}
-					if (this.boMAN && maidProp.idx == 33)
+					if (this.boMAN && maidProp.idx == 43)
 					{
-						for (int j = 34; j <= 86; j++)
+						for (int j = 44; j <= 100; j++)
 						{
 							this.GetProp((MPN)j).boDut = true;
 						}
 						this.GetProp(MPN.moza).boDut = true;
 					}
-					else if (maidProp.idx == 40 || maidProp.idx == 36 || maidProp.idx == 37 || maidProp.idx == 39 || maidProp.idx == 38)
+					else if (maidProp.idx == 50 || maidProp.idx == 46 || maidProp.idx == 47 || maidProp.idx == 49 || maidProp.idx == 48)
 					{
 						this.GetProp(MPN.haircolor).boDut = true;
 					}
-					else if (maidProp.idx == 35)
+					else if (maidProp.idx == 45)
 					{
-						this.GetProp(MPN.skin).boDut = true;
-						this.GetProp(MPN.eye).boDut = true;
-						this.GetProp(MPN.mayu).boDut = true;
-						this.GetProp(MPN.eye_hi).boDut = true;
-						this.GetProp(MPN.EyeClose).boDut = true;
-						this.GetProp(MPN.FaceShape).boDut = true;
-						this.GetProp(MPN.MayuX).boDut = true;
-						this.GetProp(MPN.MayuY).boDut = true;
+						MPN[] array = new MPN[]
+						{
+							MPN.skin,
+							MPN.eye,
+							MPN.mayu,
+							MPN.eye_hi,
+							MPN.eye_hi_r,
+							MPN.EyeClose,
+							MPN.EarNone,
+							MPN.EarElf,
+							MPN.EarRot,
+							MPN.EarScl,
+							MPN.NosePos,
+							MPN.NoseScl,
+							MPN.FaceShape,
+							MPN.FaceShapeSlim,
+							MPN.MayuShapeIn,
+							MPN.MayuShapeOut,
+							MPN.MayuX,
+							MPN.MayuY,
+							MPN.MayuRot,
+							MPN.eye_hi_r,
+							MPN.eyewhite,
+							MPN.nose,
+							MPN.facegloss
+						};
+						foreach (MPN mpn in array)
+						{
+							this.GetProp(mpn).boDut = true;
+						}
 					}
-					else if (maidProp.idx == 42)
+					else if (maidProp.idx == 52)
 					{
 						MaidProp prop = this.GetProp(MPN.acctatoo);
 						prop.boDut = true;
 						if (prop.listSubProp != null)
 						{
-							for (int k = 0; k < prop.listSubProp.Count; k++)
+							for (int l = 0; l < prop.listSubProp.Count; l++)
 							{
-								if (prop.listSubProp[k] != null)
+								if (prop.listSubProp[l] != null)
 								{
-									prop.listSubProp[k].bDut = true;
+									prop.listSubProp[l].bDut = true;
 								}
 							}
 						}
@@ -1006,11 +1065,11 @@ public class Maid : MonoBehaviour
 						prop.boDut = true;
 						if (prop.listSubProp != null)
 						{
-							for (int l = 0; l < prop.listSubProp.Count; l++)
+							for (int n = 0; n < prop.listSubProp.Count; n++)
 							{
-								if (prop.listSubProp[l] != null)
+								if (prop.listSubProp[n] != null)
 								{
-									prop.listSubProp[l].bDut = true;
+									prop.listSubProp[n].bDut = true;
 								}
 							}
 						}
@@ -1094,7 +1153,7 @@ public class Maid : MonoBehaviour
 			}
 			if (mp.boTempDut)
 			{
-				if (!string.IsNullOrEmpty(mp.strTempFileName) && !Menu.ProcScript(this, mp.strTempFileName, true, null))
+				if (!string.IsNullOrEmpty(mp.strTempFileName) && !Menu.ProcScript(this, mp, true, null))
 				{
 					Debug.LogWarning("メニューファイル " + mp.strFileName + " が開けませんでした。");
 					mp.nTempFileNameRID = 0;
@@ -1102,7 +1161,7 @@ public class Maid : MonoBehaviour
 				}
 				result = true;
 				mp.boTempDut = false;
-				if (83 <= mp.idx && mp.idx <= 86)
+				if (97 <= mp.idx && mp.idx <= 100)
 				{
 					mp.nTempFileNameRID = 0;
 					mp.strTempFileName = string.Empty;
@@ -1110,17 +1169,17 @@ public class Maid : MonoBehaviour
 			}
 			if (mp.boDut)
 			{
-				if (!string.IsNullOrEmpty(mp.strFileName) && !Menu.ProcScript(this, mp.strFileName, false, null))
+				if (!string.IsNullOrEmpty(mp.strFileName) && !Menu.ProcScript(this, mp, false, null))
 				{
 					Debug.LogWarning("メニューファイル " + mp.strFileName + " が開けませんでした。");
 					if (this.DelProp((MPN)mp.idx, false))
 					{
-						Menu.ProcScript(this, mp.strFileName, false, null);
+						Menu.ProcScript(this, mp, false, null);
 					}
 				}
 				result = true;
 				mp.boDut = false;
-				if (83 <= mp.idx && mp.idx <= 86)
+				if (97 <= mp.idx && mp.idx <= 100)
 				{
 					mp.nFileNameRID = 0;
 					mp.strFileName = string.Empty;
@@ -1214,12 +1273,14 @@ public class Maid : MonoBehaviour
 	public bool SerializeProp(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MPROP_LIST");
-		f_bwWrite.Write(1210);
+		f_bwWrite.Write(1230);
 		f_bwWrite.Write(this.m_dicMaidProp.Count);
+		int num = 0;
 		foreach (KeyValuePair<string, MaidProp> keyValuePair in this.m_dicMaidProp)
 		{
 			f_bwWrite.Write(keyValuePair.Key);
 			keyValuePair.Value.Serialize(f_bwWrite);
+			num++;
 		}
 		return true;
 	}
@@ -1246,7 +1307,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeMisc(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MAID_MISC");
-		f_bwWrite.Write(1210);
+		f_bwWrite.Write(1230);
 		f_bwWrite.Write(this.m_nActiveSlotNo);
 		if (this.m_texIcon != null)
 		{
@@ -1271,7 +1332,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeBody(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MAID_BODY");
-		f_bwWrite.Write(1210);
+		f_bwWrite.Write(1230);
 		return true;
 	}
 
@@ -1286,7 +1347,7 @@ public class Maid : MonoBehaviour
 			string tag = f_brRead.ReadString();
 			MaidProp prop = this.GetProp(tag);
 			prop.Deserialize(f_brRead);
-			if (num <= 135 && prop.idx == 69 && Path.GetFileNameWithoutExtension(prop.strFileName.ToLower()) == "acckubi007_i_")
+			if (num <= 135 && prop.idx == 83 && Path.GetFileNameWithoutExtension(prop.strFileName.ToLower()) == "acckubi007_i_")
 			{
 				prop.boDut = true;
 				prop.strFileName = CM3.dicDelItem[MPN.acckubi];
@@ -1344,6 +1405,7 @@ public class Maid : MonoBehaviour
 		NDebug.Assert(a == "CM3D2_MPROP_LIST", "メイドプロパティリストのヘッダーが不正です。");
 		int num = f_brRead.ReadInt32();
 		int num2 = f_brRead.ReadInt32();
+		HashSet<MPN> hashSet = new HashSet<MPN>();
 		for (int i = 0; i < num2; i++)
 		{
 			if (4 <= num)
@@ -1352,6 +1414,7 @@ public class Maid : MonoBehaviour
 			}
 			MaidProp maidProp = new MaidProp();
 			maidProp.Deserialize(f_brRead);
+			hashSet.Add((MPN)maidProp.idx);
 			list.Add(maidProp);
 			if (num <= 110 && maidProp.idx == 10)
 			{
@@ -1391,6 +1454,46 @@ public class Maid : MonoBehaviour
 			list.Add(Maid.CreateProp(0, 100, 50, MPN.EyeBallSclX, 2));
 			list.Add(Maid.CreateProp(0, 100, 50, MPN.EyeBallSclY, 2));
 		}
+		if (!hashSet.Contains(MPN.FaceShapeSlim))
+		{
+			list.Add(Maid.CreateProp(0, 100, 0, MPN.FaceShapeSlim, 2));
+		}
+		if (!hashSet.Contains(MPN.EarNone))
+		{
+			list.Add(Maid.CreateProp(0, 1, 0, MPN.EarNone, 2));
+		}
+		if (!hashSet.Contains(MPN.EarElf))
+		{
+			list.Add(Maid.CreateProp(0, 100, 0, MPN.EarElf, 2));
+		}
+		if (!hashSet.Contains(MPN.EarRot))
+		{
+			list.Add(Maid.CreateProp(0, 100, 50, MPN.EarRot, 2));
+		}
+		if (!hashSet.Contains(MPN.EarScl))
+		{
+			list.Add(Maid.CreateProp(0, 100, 50, MPN.EarScl, 2));
+		}
+		if (!hashSet.Contains(MPN.NosePos))
+		{
+			list.Add(Maid.CreateProp(0, 100, 50, MPN.NosePos, 2));
+		}
+		if (!hashSet.Contains(MPN.NoseScl))
+		{
+			list.Add(Maid.CreateProp(0, 100, 50, MPN.NoseScl, 2));
+		}
+		if (!hashSet.Contains(MPN.MayuShapeIn))
+		{
+			list.Add(Maid.CreateProp(0, 100, 50, MPN.MayuShapeIn, 2));
+		}
+		if (!hashSet.Contains(MPN.MayuShapeOut))
+		{
+			list.Add(Maid.CreateProp(0, 100, 50, MPN.MayuShapeOut, 2));
+		}
+		if (!hashSet.Contains(MPN.MayuRot))
+		{
+			list.Add(Maid.CreateProp(0, 100, 50, MPN.MayuRot, 2));
+		}
 		return list;
 	}
 
@@ -2447,6 +2550,63 @@ public class Maid : MonoBehaviour
 		this.m_vOffsetPostion = f_vecLocalPos;
 	}
 
+	public void UpdateTransformData()
+	{
+		this.SetPos(this.baseOffset + this.motionOffset);
+		if (this.boMAN)
+		{
+			if (!string.IsNullOrEmpty(this.rotateLinkMaid))
+			{
+				for (int i = 0; i < GameMain.Instance.CharacterMgr.GetMaidCount(); i++)
+				{
+					Maid maid = GameMain.Instance.CharacterMgr.GetMaid(i);
+					if (maid != null && maid.status.guid == this.rotateLinkMaid)
+					{
+						maid.UpdateTransformData();
+						break;
+					}
+				}
+			}
+			return;
+		}
+		Vector3 position = base.transform.position;
+		base.transform.localRotation = Quaternion.identity;
+		if (!Mathf.Approximately(0f, this.baseEulerAngles.x))
+		{
+			base.transform.RotateAround(position, Vector3.right, this.baseEulerAngles.x);
+		}
+		if (!Mathf.Approximately(0f, this.baseEulerAngles.y))
+		{
+			base.transform.RotateAround(position, Vector3.up, this.baseEulerAngles.y);
+		}
+		if (!Mathf.Approximately(0f, this.baseEulerAngles.z))
+		{
+			base.transform.RotateAround(position, Vector3.forward, this.baseEulerAngles.z);
+		}
+		for (int j = 0; j < GameMain.Instance.CharacterMgr.GetManCount(); j++)
+		{
+			Maid man = GameMain.Instance.CharacterMgr.GetMan(j);
+			if (man != null && man.status.guid == this.rotateLinkMaid)
+			{
+				man.SetPos(man.baseOffset + man.motionOffset);
+				man.transform.localRotation = Quaternion.identity;
+				if (!Mathf.Approximately(0f, this.baseEulerAngles.x))
+				{
+					man.transform.RotateAround(position, Vector3.right, this.baseEulerAngles.x);
+				}
+				if (!Mathf.Approximately(0f, this.baseEulerAngles.y))
+				{
+					man.transform.RotateAround(position, Vector3.up, this.baseEulerAngles.y);
+				}
+				if (!Mathf.Approximately(0f, this.baseEulerAngles.z))
+				{
+					man.transform.RotateAround(position, Vector3.forward, this.baseEulerAngles.z);
+				}
+				break;
+			}
+		}
+	}
+
 	public void SetPosOffsetFromUdeSclX(string category, float val)
 	{
 		this.m_vOffsetPostion.x = ((float)this.GetProp(category).value - 50f) * (val / 50f);
@@ -2740,6 +2900,14 @@ public class Maid : MonoBehaviour
 
 	public bool boOffsetY = true;
 
+	public Vector3 baseOffset = Vector3.zero;
+
+	public Vector3 motionOffset = Vector3.zero;
+
+	public Vector3 baseEulerAngles = Vector3.zero;
+
+	public string rotateLinkMaid = string.Empty;
+
 	private Dictionary<string, MaidProp> m_dicMaidProp = new Dictionary<string, MaidProp>();
 
 	private MaidProp[] m_aryMaidProp;

+ 190 - 0
Assembly-CSharp/MaidIdleMotionAdditiveHook.cs

@@ -0,0 +1,190 @@
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using UnityEngine;
+
+[RequireComponent(typeof(Animation))]
+[RequireComponent(typeof(Animator))]
+public class MaidIdleMotionAdditiveHook : MonoBehaviour
+{
+	public bool isAdditive
+	{
+		get
+		{
+			return this.isAdditive_;
+		}
+		set
+		{
+			this.isAdditive_ = value;
+			if (this.isAdditive_)
+			{
+				if (this.StartAdditive(this.targetClip))
+				{
+					this.maidAnimation.enabled = false;
+					this.animator.enabled = true;
+				}
+				else
+				{
+					this.isAdditive_ = false;
+				}
+			}
+			else
+			{
+				this.animator.enabled = false;
+				if (!this.maidAnimation.enabled)
+				{
+					this.maidAnimation.enabled = true;
+					bool flag = false;
+					IEnumerator enumerator = this.maidAnimation.GetEnumerator();
+					try
+					{
+						while (enumerator.MoveNext())
+						{
+							object obj = enumerator.Current;
+							AnimationState animationState = (AnimationState)obj;
+							if (this.targetClip != null)
+							{
+								if (animationState != null && animationState.clip != this.targetClip)
+								{
+									animationState.time = 0f;
+									flag = true;
+									break;
+								}
+							}
+							else if (animationState != null && animationState.clip != null && this.maidAnimation.IsPlaying(animationState.clip.name))
+							{
+								animationState.time = 0f;
+								flag = true;
+								break;
+							}
+						}
+					}
+					finally
+					{
+						IDisposable disposable;
+						if ((disposable = (enumerator as IDisposable)) != null)
+						{
+							disposable.Dispose();
+						}
+					}
+					if (flag)
+					{
+						this.maidAnimation.Sample();
+					}
+				}
+			}
+		}
+	}
+
+	public float additiveWeight
+	{
+		get
+		{
+			return this.animator.GetLayerWeight(1);
+		}
+		set
+		{
+			this.animator.SetLayerWeight(1, value);
+		}
+	}
+
+	private void Awake()
+	{
+		this.maidAnimation = base.GetComponent<Animation>();
+		this.animator = base.GetComponent<Animator>();
+		if (this.animator == null)
+		{
+			this.animator = base.gameObject.AddComponent<Animator>();
+		}
+		this.animator.enabled = false;
+		this.animator.runtimeAnimatorController = UnityEngine.Object.Instantiate<RuntimeAnimatorController>(Resources.Load<RuntimeAnimatorController>("ScenePhotoMode/Animation/MaidIdleAdditive"));
+		this.overrideController = new AnimatorOverrideController(this.animator.runtimeAnimatorController);
+		List<KeyValuePair<AnimationClip, AnimationClip>> list = new List<KeyValuePair<AnimationClip, AnimationClip>>(this.overrideController.overridesCount);
+		this.overrideController.GetOverrides(list);
+		list[0] = new KeyValuePair<AnimationClip, AnimationClip>(list[0].Key, null);
+		this.overrideController.ApplyOverrides(list);
+		this.animator.runtimeAnimatorController = this.overrideController;
+	}
+
+	private bool StartAdditive(AnimationClip clip = null)
+	{
+		if (clip == null)
+		{
+			IEnumerator enumerator = this.maidAnimation.GetEnumerator();
+			try
+			{
+				while (enumerator.MoveNext())
+				{
+					object obj = enumerator.Current;
+					AnimationState animationState = (AnimationState)obj;
+					if (!(animationState == null) && !(animationState.clip == null))
+					{
+						if (this.maidAnimation.IsPlaying(animationState.clip.name))
+						{
+							clip = animationState.clip;
+							break;
+						}
+					}
+				}
+			}
+			finally
+			{
+				IDisposable disposable;
+				if ((disposable = (enumerator as IDisposable)) != null)
+				{
+					disposable.Dispose();
+				}
+			}
+			if (clip == null)
+			{
+				return false;
+			}
+		}
+		AnimationClip animationClip = this.instanceClip;
+		AnimationClip animationClip2 = UnityEngine.Object.Instantiate<AnimationClip>(clip);
+		animationClip2.legacy = false;
+		this.instanceClip = animationClip2;
+		List<KeyValuePair<AnimationClip, AnimationClip>> list = new List<KeyValuePair<AnimationClip, AnimationClip>>(this.overrideController.overridesCount);
+		this.overrideController.GetOverrides(list);
+		list[0] = new KeyValuePair<AnimationClip, AnimationClip>(list[0].Key, animationClip2);
+		this.overrideController.ApplyOverrides(list);
+		this.animator.CrossFade(this.animator.GetCurrentAnimatorStateInfo(0).fullPathHash, 0f);
+		if (animationClip != null)
+		{
+			UnityEngine.Object.DestroyImmediate(animationClip);
+		}
+		return true;
+	}
+
+	private void OnDestroy()
+	{
+		UnityEngine.Object.Destroy(this);
+		if (!this.notAnimatorDestroy && this.animator != null)
+		{
+			this.animator.enabled = false;
+			UnityEngine.Object.Destroy(this.animator);
+			this.animator = null;
+		}
+		if (this.instanceClip != null)
+		{
+			UnityEngine.Object.Destroy(this.instanceClip);
+			this.instanceClip = null;
+		}
+	}
+
+	private const string IdleAdditiveAnimatorControllerPath = "ScenePhotoMode/Animation/MaidIdleAdditive";
+
+	public AnimationClip targetClip;
+
+	public bool notAnimatorDestroy;
+
+	private bool isAdditive_;
+
+	private Animator animator;
+
+	private Animation maidAnimation;
+
+	private AnimatorOverrideController overrideController;
+
+	private AnimationClip instanceClip;
+}

+ 21 - 9
Assembly-CSharp/MaidManagementMain.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using com.workman.cm3d2.scene.dailyEtc;
+using I2.Loc;
 using MaidStatus;
 using PlayerStatus;
 using UnityEngine;
@@ -26,7 +27,14 @@ public class MaidManagementMain : WfScreenChildren
 		}
 		this.yotogi_skill_list_mgr_ = UTY.GetChildObject(this.yotogi_info_object_, "YotogiSkillList", false).GetComponent<YotogiSkillListManager>();
 		this.yotogi_class_list_mgr_ = UTY.GetChildObject(this.yotogi_info_object_, "YotogiClassList", false).GetComponent<YotogiClassListManager>();
-		this.status_panel_ = UTY.GetChildObject(base.root_obj, "StatusPanel", false);
+		if (GameUty.supportMultiLanguage)
+		{
+			this.status_panel_ = UTY.GetChildObject(base.root_obj, "StatusPanel_localize", false);
+		}
+		else
+		{
+			this.status_panel_ = UTY.GetChildObject(base.root_obj, "StatusPanel", false);
+		}
 		this.class_change_panel_ = UTY.GetChildObject(base.root_obj, "ClassChangePanel", false).GetComponent<ClassChangePanel>();
 		if (!this.class_change_panel_.gameObject.activeSelf)
 		{
@@ -258,8 +266,9 @@ public class MaidManagementMain : WfScreenChildren
 		else if (text == "解雇" && this.select_maid_ != null && 2 <= this.chara_mgr_.GetStockMaidCount() && !this.select_maid_.status.leader)
 		{
 			int banishmentPrice = this.select_maid_.status.banishmentPrice;
-			string f_strMsg = this.select_maid_.status.fullNameJpStyle + "\nを解雇しますか?\n資金 +" + Utility.ConvertMoneyText(banishmentPrice) + "CR";
-			GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BanishmentMaid), null);
+			string text2 = LocalizationManager.GetTranslation("Dialog/メイド管理/{0}を解雇しますか?資金 +{1}CR", true, 0, true, false, null, null);
+			text2 = string.Format(text2, this.select_maid_.status.fullNameJpStyle, Utility.ConvertMoneyText(banishmentPrice));
+			GameMain.Instance.SysDlg.Show(text2, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.BanishmentMaid), null);
 		}
 		else
 		{
@@ -330,13 +339,15 @@ public class MaidManagementMain : WfScreenChildren
 		int num = this.employmentPrice;
 		if (this.chara_mgr_.status.money - (long)num < 0L)
 		{
-			string f_strMsg = "新しいメイドを雇用するには\n" + Utility.ConvertMoneyText(num) + "CRが必要です。";
-			GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK, null, null);
+			string text = LocalizationManager.GetTranslation("Dialog/メイド管理/新しいメイドを雇用するには{0}CRが必要です。", true, 0, true, false, null, null);
+			text = string.Format(text, Utility.ConvertMoneyText(num));
+			GameMain.Instance.SysDlg.Show(text, SystemDialog.TYPE.OK, null, null);
 		}
 		else
 		{
-			string f_strMsg2 = "新しいメイドを雇用しますか?\n資金 -" + Utility.ConvertMoneyText(num) + "CR";
-			GameMain.Instance.SysDlg.Show(f_strMsg2, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.Employment), null);
+			string text2 = LocalizationManager.GetTranslation("Dialog/メイド管理/新しいメイドを雇用しますか?資金 -{0}CR", true, 0, true, false, null, null);
+			text2 = string.Format(text2, Utility.ConvertMoneyText(num));
+			GameMain.Instance.SysDlg.Show(text2, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.Employment), null);
 		}
 	}
 
@@ -497,7 +508,8 @@ public class MaidManagementMain : WfScreenChildren
 
 	public void BanishmentMaid()
 	{
-		string f_strMsg = this.select_maid_.status.fullNameJpStyle + "\nを解雇しました";
+		string text = LocalizationManager.GetTranslation("Dialog/メイド管理/{0}を解雇しました", true, 0, true, false, null, null);
+		text = string.Format(text, this.select_maid_.status.fullNameJpStyle);
 		int banishmentPrice = this.select_maid_.status.banishmentPrice;
 		GameMain.Instance.CharacterMgr.status.money += (long)banishmentPrice;
 		int i;
@@ -512,7 +524,7 @@ public class MaidManagementMain : WfScreenChildren
 		this.chara_mgr_.BanishmentMaid(i);
 		this.button_dic_["雇用"].isEnabled = (this.GetMaidNumber() < 200);
 		this.button_dic_["移籍"].isEnabled = (GameMain.Instance.CharacterMgr.status.isAvailableTransfer && this.GetMaidNumber() < 200);
-		GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK, null, null);
+		GameMain.Instance.SysDlg.Show(text, SystemDialog.TYPE.OK, null, null);
 	}
 
 	private int GetMaidNumber()

+ 27 - 7
Assembly-CSharp/MaidParts.cs

@@ -8,8 +8,9 @@ public class MaidParts : MonoBehaviour
 	{
 		this.m_objMaid = f_objMaid;
 		this.m_Maid = f_Maid;
-		for (int i = 0; i < 9; i++)
+		for (int i = 0; i < 10; i++)
 		{
+			this.m_aryPartsColor[i] = MaidParts.m_aryPartsColorDefault[i];
 			this.m_aryPartsColorTable[i] = new Texture2D(256, 1, TextureFormat.RGBA32, false);
 			this.m_aryPartsColorTable[i].wrapMode = TextureWrapMode.Clamp;
 		}
@@ -36,7 +37,7 @@ public class MaidParts : MonoBehaviour
 	public unsafe bool Serialize(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MULTI_COL");
-		f_bwWrite.Write(1210);
+		f_bwWrite.Write(1230);
 		f_bwWrite.Write(this.m_aryPartsColor.Length);
 		for (int i = 0; i < this.m_aryPartsColor.Length; i++)
 		{
@@ -62,7 +63,11 @@ public class MaidParts : MonoBehaviour
 
 	public unsafe static MaidParts.PartsColor[] DeserializePre(BinaryReader f_brRead)
 	{
-		MaidParts.PartsColor[] array = new MaidParts.PartsColor[9];
+		MaidParts.PartsColor[] array = new MaidParts.PartsColor[10];
+		for (int i = 0; i < 10; i++)
+		{
+			array[i] = MaidParts.m_aryPartsColorDefault[i];
+		}
 		string a = f_brRead.ReadString();
 		NDebug.Assert(a == "CM3D2_MULTI_COL", "無限色のヘッダーが不正です。");
 		int num = f_brRead.ReadInt32();
@@ -85,7 +90,7 @@ public class MaidParts : MonoBehaviour
 				"HAIR_OUTLINE",
 				"SKIN_OUTLINE"
 			};
-			for (int i = 0; i < num2; i++)
+			for (int j = 0; j < num2; j++)
 			{
 				MaidParts.PartsColor partsColor = default(MaidParts.PartsColor);
 				partsColor.m_bUse = f_brRead.ReadBoolean();
@@ -98,7 +103,7 @@ public class MaidParts : MonoBehaviour
 				partsColor.m_nShadowChroma = f_brRead.ReadInt32();
 				partsColor.m_nShadowBrightness = f_brRead.ReadInt32();
 				partsColor.m_nShadowContrast = f_brRead.ReadInt32();
-				MaidParts.PARTS_COLOR parts_COLOR = (MaidParts.PARTS_COLOR)Enum.Parse(typeof(MaidParts.PARTS_COLOR), array2[i], true);
+				MaidParts.PARTS_COLOR parts_COLOR = (MaidParts.PARTS_COLOR)Enum.Parse(typeof(MaidParts.PARTS_COLOR), array2[j], true);
 				array[(int)parts_COLOR] = partsColor;
 			}
 		}
@@ -126,7 +131,7 @@ public class MaidParts : MonoBehaviour
 		return array;
 	}
 
-	private MaidParts.PartsColor[] m_aryPartsColor = new MaidParts.PartsColor[]
+	private static readonly MaidParts.PartsColor[] m_aryPartsColorDefault = new MaidParts.PartsColor[]
 	{
 		new MaidParts.PartsColor
 		{
@@ -190,10 +195,24 @@ public class MaidParts : MonoBehaviour
 			m_nMainChroma = 149,
 			m_nMainBrightness = 247,
 			m_nMainContrast = 100
+		},
+		new MaidParts.PartsColor
+		{
+			m_nMainHue = 18,
+			m_nMainChroma = 36,
+			m_nMainBrightness = 434,
+			m_nMainContrast = 100,
+			m_nShadowRate = 255,
+			m_nShadowHue = 18,
+			m_nShadowChroma = 79,
+			m_nShadowBrightness = 321,
+			m_nShadowContrast = 0
 		}
 	};
 
-	private Texture2D[] m_aryPartsColorTable = new Texture2D[9];
+	private MaidParts.PartsColor[] m_aryPartsColor = new MaidParts.PartsColor[10];
+
+	private Texture2D[] m_aryPartsColorTable = new Texture2D[10];
 
 	private GameObject m_objMaid;
 
@@ -211,6 +230,7 @@ public class MaidParts : MonoBehaviour
 		NIPPLE,
 		HAIR_OUTLINE,
 		SKIN_OUTLINE,
+		EYE_WHITE,
 		MAX
 	}
 

+ 24 - 0
Assembly-CSharp/MaidPlate.cs

@@ -39,6 +39,11 @@ public class MaidPlate : MonoBehaviour
 		this.left_plate_.last_name_label = UTY.GetChildObject(this.left_plate_.main, "FrameBaseData/TextLastName", false).GetComponent<UILabel>();
 		this.left_plate_.first_name_label = UTY.GetChildObject(this.left_plate_.main, "FrameBaseData/TextFirstName", false).GetComponent<UILabel>();
 		this.left_plate_.contract_type_label = UTY.GetChildObject(this.left_plate_.main, "FrameBaseData/TextTypeName", false).GetComponent<UILabel>();
+		if (this.engModeMoveText && GameUty.supportMultiLanguage)
+		{
+			Vector3 localPosition = this.left_plate_.contract_type_label.transform.localPosition;
+			this.left_plate_.contract_type_label.transform.localPosition = new Vector3(80f, localPosition.y, localPosition.z);
+		}
 		this.right_plate_.main = UTY.GetChildObject(base.gameObject, "RightPlate", false);
 		this.right_plate_.evaluation_label = UTY.GetChildObject(this.right_plate_.main, "RankingBGFrame/TextEvaluation", false).GetComponent<UILabel>();
 		this.right_plate_.total_evaluation_label = UTY.GetChildObject(this.right_plate_.main, "RankingBGFrame/Frame0/TextTotalEvaluation", false).GetComponent<UILabel>();
@@ -151,6 +156,11 @@ public class MaidPlate : MonoBehaviour
 		else
 		{
 			this.left_plate_.contract_type_label.text = status.subCharaStatus.contractText;
+			Localize component2 = this.left_plate_.contract_type_label.GetComponent<Localize>();
+			if (component2 != null)
+			{
+				component2.SetTerm("MaidStatus/契約タイプ/" + status.subCharaStatus.contractText);
+			}
 		}
 		this.right_plate_.evaluation_label.text = status.evaluation.ToString();
 		this.right_plate_.total_evaluation_label.text = status.totalEvaluations.ToString();
@@ -176,6 +186,17 @@ public class MaidPlate : MonoBehaviour
 		}
 	}
 
+	public void SetEmpty()
+	{
+		this.maid_ = null;
+		this.left_plate_.first_name_label.text = string.Empty;
+		this.left_plate_.last_name_label.text = string.Empty;
+		this.left_plate_.leader_plate_sprite.gameObject.SetActive(false);
+		this.left_plate_.engage_heart.gameObject.SetActive(false);
+		this.left_plate_.contract_type_label.text = string.Empty;
+		this.left_plate_.thumbnail_sprite.sprite2D = null;
+	}
+
 	public Maid maid
 	{
 		get
@@ -187,6 +208,9 @@ public class MaidPlate : MonoBehaviour
 	[SerializeField]
 	private bool miniMode;
 
+	[SerializeField]
+	private bool engModeMoveText;
+
 	private Maid maid_;
 
 	private UISprite back_plate_;

+ 3 - 3
Assembly-CSharp/MaidProp.cs

@@ -8,7 +8,7 @@ public class MaidProp
 	public bool Serialize(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MPROP");
-		f_bwWrite.Write(1210);
+		f_bwWrite.Write(1230);
 		f_bwWrite.Write(this.idx);
 		f_bwWrite.Write(this.name);
 		f_bwWrite.Write(this.type);
@@ -189,7 +189,7 @@ public class MaidProp
 			this.strFileName = "_I_mayu_001_mugen.menu";
 			this.nFileNameRID = this.strFileName.ToLower().GetHashCode();
 		}
-		if (num <= 208 && this.idx == 44 && this.strFileName.ToLower() == "_I_acctatoo_del.menu".ToLower())
+		if (num <= 208 && this.idx == 54 && this.strFileName.ToLower() == "_I_acctatoo_del.menu".ToLower())
 		{
 			this.strFileName = CM3.dicDelItem[MPN.accnail];
 			this.nFileNameRID = this.strFileName.ToLower().GetHashCode();
@@ -284,7 +284,7 @@ public class MaidProp
 				}
 			}
 		}
-		if (num < 200 && this.idx == 37 && Path.GetFileNameWithoutExtension(this.strFileName.ToLower()) == "hair_r095_i_")
+		if (num < 200 && this.idx == 47 && Path.GetFileNameWithoutExtension(this.strFileName.ToLower()) == "hair_r095_i_")
 		{
 			this.strFileName = "hair_r110_i_.menu";
 			this.nFileNameRID = this.strFileName.ToLower().GetHashCode();

+ 59 - 20
Assembly-CSharp/MaidStatus/CsvData/AbstractClassData.cs

@@ -149,6 +149,14 @@ namespace MaidStatus.CsvData
 			}
 		}
 
+		public string termExplanatoryText
+		{
+			get
+			{
+				return "MaidStatus/" + this.termCategoryName + "/説明/" + this.uniqueName;
+			}
+		}
+
 		public readonly int id;
 
 		public readonly string uniqueName;
@@ -335,12 +343,14 @@ namespace MaidStatus.CsvData
 				return true;
 			}
 
-			public virtual List<KeyValuePair<string, bool>> CreateConditionTextAndStaturResults(Status status)
+			public virtual List<KeyValuePair<string[], bool>> CreateConditionTextAndStaturResults(Status status)
 			{
-				List<KeyValuePair<string, bool>> list = new List<KeyValuePair<string, bool>>();
+				List<KeyValuePair<string[], bool>> list = new List<KeyValuePair<string[], bool>>();
 				if (0 < this.requestSeikeikens.Count)
 				{
-					string text = "性経験 : ";
+					string text = "MaidStatus/条件文/性経験 : ";
+					List<string> list2 = new List<string>();
+					int num = 0;
 					bool flag = false;
 					foreach (Seikeiken seikeiken in this.requestSeikeikens)
 					{
@@ -348,51 +358,80 @@ namespace MaidStatus.CsvData
 						{
 							text += ",";
 						}
-						text += EnumConvert.GetString(seikeiken);
+						list2.Add(EnumConvert.GetTerm(seikeiken));
+						string text2 = text;
+						text = string.Concat(new object[]
+						{
+							text2,
+							"{",
+							num,
+							"}"
+						});
 						flag = true;
+						num++;
 					}
-					list.Add(new KeyValuePair<string, bool>(text, this.requestSeikeikens.Contains(status.seikeiken)));
+					List<string> list3 = new List<string>();
+					list3.Add(text);
+					list3.AddRange(list2);
+					list.Add(new KeyValuePair<string[], bool>(list3.ToArray(), this.requestSeikeikens.Contains(status.seikeiken)));
 				}
 				if (0 < this.requestContracts.Count)
 				{
-					string text2 = "契約タイプ : ";
+					string text3 = "MaidStatus/条件文/契約タイプ : ";
+					List<string> list4 = new List<string>();
+					int num2 = 0;
 					bool flag2 = false;
 					foreach (Contract contract in this.requestContracts)
 					{
 						if (flag2)
 						{
-							text2 += ",";
+							text3 += ",";
 						}
-						text2 += EnumConvert.GetString(contract);
+						list4.Add(EnumConvert.GetTerm(contract));
+						string text2 = text3;
+						text3 = string.Concat(new object[]
+						{
+							text2,
+							"{",
+							num2,
+							"}"
+						});
 						flag2 = true;
+						num2++;
 					}
-					list.Add(new KeyValuePair<string, bool>(text2, this.requestContracts.Contains(status.contract)));
+					List<string> list5 = new List<string>();
+					list5.Add(text3);
+					list5.AddRange(list4);
+					list.Add(new KeyValuePair<string[], bool>(list5.ToArray(), this.requestContracts.Contains(status.contract)));
 				}
 				if (0 < this.requestVipFlags.Count)
 				{
-					string text3 = string.Empty;
-					foreach (int num in this.requestVipFlags)
+					string empty = string.Empty;
+					foreach (int key in this.requestVipFlags)
 					{
-						if (!ScheduleCSVData.AllData.ContainsKey(num) || ScheduleCSVData.AllData[num].type != ScheduleTaskCtrl.TaskType.Yotogi)
+						List<string> list6 = new List<string>();
+						if (!ScheduleCSVData.AllData.ContainsKey(key) || ScheduleCSVData.AllData[key].type != ScheduleTaskCtrl.TaskType.Yotogi)
 						{
-							text3 = "不明なVIP[" + num + "]を実行している";
+							list6.Add("不明なVIP[{0}]を実行している");
+							list6.Add(key.ToString());
 						}
 						else
 						{
-							ScheduleCSVData.ScheduleBase scheduleBase = ScheduleCSVData.AllData[num];
+							ScheduleCSVData.ScheduleBase scheduleBase = ScheduleCSVData.AllData[key];
 							ScheduleCSVData.Yotogi yotogi = (ScheduleCSVData.Yotogi)scheduleBase;
-							text3 = "「" + yotogi.name + "」を実行している";
+							list6.Add("「{0}」を実行している");
+							list6.Add(yotogi.name);
 						}
-						if (!string.IsNullOrEmpty(text3))
+						if (!string.IsNullOrEmpty(empty))
 						{
 							ReadOnlyDictionary<int, NightWorkState> night_works_state_dic = GameMain.Instance.CharacterMgr.status.night_works_state_dic;
-							bool value = night_works_state_dic.ContainsKey(num) && night_works_state_dic[num].finish;
-							list.Add(new KeyValuePair<string, bool>(text3, value));
+							bool value = night_works_state_dic.ContainsKey(key) && night_works_state_dic[key].finish;
+							list.Add(new KeyValuePair<string[], bool>(list6.ToArray(), value));
 						}
 					}
 				}
-				List<KeyValuePair<string, bool>> list2 = this.requestParameters.CreateConditionTextAndStaturResults(status);
-				foreach (KeyValuePair<string, bool> item in list2)
+				List<KeyValuePair<string[], bool>> list7 = this.requestParameters.CreateConditionTextAndStaturResults(status);
+				foreach (KeyValuePair<string[], bool> item in list7)
 				{
 					list.Add(item);
 				}

+ 6 - 0
Assembly-CSharp/MaidStatus/EnumConvert.cs

@@ -160,5 +160,11 @@ namespace MaidStatus
 			}
 			return result;
 		}
+
+		public const string TermPrefixContract = "MaidStatus/契約タイプ/";
+
+		public const string TermPrefixSeikeiken = "MaidStatus/性経験タイプ/";
+
+		public const string TermPrefixRelation = "MaidStatus/関係タイプ/";
 	}
 }

+ 8 - 4
Assembly-CSharp/MaidStatus/ParametersPack.cs

@@ -253,15 +253,19 @@ namespace MaidStatus
 			return true;
 		}
 
-		public List<KeyValuePair<string, bool>> CreateConditionTextAndStaturResults(Status status)
+		public List<KeyValuePair<string[], bool>> CreateConditionTextAndStaturResults(Status status)
 		{
-			List<KeyValuePair<string, bool>> list = new List<KeyValuePair<string, bool>>();
+			List<KeyValuePair<string[], bool>> list = new List<KeyValuePair<string[], bool>>();
 			Dictionary<ParametersPack.StatusType, int> dictionary = this.CreateCurrentStatusDic(status);
 			foreach (KeyValuePair<ParametersPack.StatusType, int> keyValuePair in this.dataPacks)
 			{
-				string str = keyValuePair.Key.ToString();
+				string text = "MaidStatus/条件文/" + keyValuePair.Key.ToString() + " {0}";
 				bool value = keyValuePair.Value <= dictionary[keyValuePair.Key];
-				list.Add(new KeyValuePair<string, bool>(str + " " + keyValuePair.Value.ToString(), value));
+				list.Add(new KeyValuePair<string[], bool>(new string[]
+				{
+					text,
+					keyValuePair.Value.ToString()
+				}, value));
 			}
 			return list;
 		}

+ 2 - 2
Assembly-CSharp/MaidStatus/Status.cs

@@ -1215,7 +1215,7 @@ namespace MaidStatus
 		public void Serialize(BinaryWriter binary)
 		{
 			binary.Write("CM3D2_MAID_STATUS");
-			binary.Write(1210);
+			binary.Write(1230);
 			binary.Write(this.guid);
 			binary.Write(this.creationTime);
 			binary.Write((short)this.heroineType);
@@ -1619,7 +1619,7 @@ namespace MaidStatus
 			this.currentMind = num;
 			this.baseReception = func(oldStatusReader.reception);
 			this.baseCare = func(oldStatusReader.care);
-			this.baseLovely = func(oldStatusReader.care);
+			this.baseLovely = func(oldStatusReader.lovely);
 			this.baseElegance = func(oldStatusReader.elegance);
 			this.baseCharm = func(oldStatusReader.charm);
 			num = 0;

+ 321 - 188
Assembly-CSharp/Menu.cs

@@ -40,25 +40,43 @@ public class Menu : MonoBehaviour
 
 	public static bool ProcScript(Maid maid, string filename, bool f_bTemp = false, SubProp f_SubProp = null)
 	{
+		return Menu.ProcScript(maid, new MaidProp
+		{
+			strFileName = filename,
+			strTempFileName = filename
+		}, f_bTemp, f_SubProp);
+	}
+
+	public static bool ProcScript(Maid maid, MaidProp mp, bool f_bTemp = false, SubProp f_SubProp = null)
+	{
+		string text;
+		if (f_bTemp)
+		{
+			text = mp.strTempFileName;
+		}
+		else
+		{
+			text = mp.strFileName;
+		}
 		bool flag = false;
-		string text = string.Empty;
+		string text2 = string.Empty;
 		byte[] array = null;
-		if (filename.IndexOf("mod_") == 0)
+		if (text.IndexOf("mod_") == 0)
 		{
 			flag = true;
-			text = Menu.GetModPathFileName(filename);
-			if (string.IsNullOrEmpty(text))
+			text2 = Menu.GetModPathFileName(text);
+			if (string.IsNullOrEmpty(text2))
 			{
 				return false;
 			}
-			filename = Menu.GetBaseItemFromMod(text);
+			text = Menu.GetBaseItemFromMod(text2);
 			try
 			{
-				using (FileStream fileStream = new FileStream(text, FileMode.Open))
+				using (FileStream fileStream = new FileStream(text2, FileMode.Open))
 				{
 					if (fileStream == null)
 					{
-						Debug.LogWarning("MODアイテムメニューファイルが見つかりません。" + filename);
+						Debug.LogWarning("MODアイテムメニューファイルが見つかりません。" + text);
 						return false;
 					}
 					array = new byte[fileStream.Length];
@@ -67,18 +85,18 @@ public class Menu : MonoBehaviour
 			}
 			catch (Exception ex)
 			{
-				Debug.LogError("ProcScript MODアイテムメニューファイルが読み込めませんでした。 : " + filename + " : " + ex.Message);
+				Debug.LogError("ProcScript MODアイテムメニューファイルが読み込めませんでした。 : " + text + " : " + ex.Message);
 				return false;
 			}
 		}
 		byte[] cd = null;
 		try
 		{
-			using (AFileBase afileBase = GameUty.FileOpen(filename, null))
+			using (AFileBase afileBase = GameUty.FileOpen(text, null))
 			{
 				if (afileBase == null || !afileBase.IsValid())
 				{
-					Debug.LogError("アイテムメニューファイルが見つかりません。" + filename);
+					Debug.LogError("アイテムメニューファイルが見つかりません。" + text);
 					return false;
 				}
 				cd = afileBase.ReadAll();
@@ -86,74 +104,107 @@ public class Menu : MonoBehaviour
 		}
 		catch (Exception ex2)
 		{
-			Debug.LogError("ProcScript アイテムメニューファイルが読み込めませんでした。 : " + filename + " : " + ex2.Message);
+			Debug.LogError("ProcScript アイテムメニューファイルが読み込めませんでした。 : " + text + " : " + ex2.Message);
 			return false;
 		}
-		Menu.ProcScriptBin(maid, cd, filename, f_bTemp, f_SubProp);
+		Menu.ProcScriptBin(maid, cd, mp, f_bTemp, f_SubProp);
 		if (flag)
 		{
-			Menu.ProcModScriptBin(maid, array, text, false);
+			Menu.ProcModScriptBin(maid, array, text2, false);
 		}
 		return true;
 	}
 
 	private static void ProcScriptBin(Maid maid, byte[] cd, string filename, bool f_bTemp = false, SubProp f_SubProp = null)
 	{
+		Menu.ProcScriptBin(maid, cd, new MaidProp
+		{
+			strFileName = filename,
+			strTempFileName = filename
+		}, f_bTemp, f_SubProp);
+	}
+
+	private static void ProcScriptBin(Maid maid, byte[] cd, MaidProp mp, bool f_bTemp = false, SubProp f_SubProp = null)
+	{
+		string text;
+		if (f_bTemp)
+		{
+			text = mp.strTempFileName;
+		}
+		else
+		{
+			text = mp.strFileName;
+		}
 		TBody body = maid.body0;
+		if (mp.idx == 61 || mp.idx == 64 || mp.idx == 65 || mp.idx == 66)
+		{
+			TBodySkin slot = body.GetSlot(1);
+			if (slot.PartsVersion < 110)
+			{
+				return;
+			}
+		}
 		List<Menu.LastParam> list = new List<Menu.LastParam>();
 		BinaryReader binaryReader = new BinaryReader(new MemoryStream(cd), Encoding.UTF8);
-		string text = binaryReader.ReadString();
-		NDebug.Assert(text == "CM3D2_MENU", "ProcScriptBin 例外 : ヘッダーファイルが不正です。" + text);
-		int num = binaryReader.ReadInt32();
-		string str = binaryReader.ReadString();
 		string text2 = binaryReader.ReadString();
+		NDebug.Assert(text2 == "CM3D2_MENU", "ProcScriptBin 例外 : ヘッダーファイルが不正です。" + text2);
+		int num = binaryReader.ReadInt32();
 		string text3 = binaryReader.ReadString();
 		string text4 = binaryReader.ReadString();
+		string text5 = binaryReader.ReadString();
+		string text6 = binaryReader.ReadString();
 		long num2 = (long)binaryReader.ReadInt32();
 		bool flag = false;
-		string text5 = string.Empty;
-		string text6 = string.Empty;
 		string text7 = string.Empty;
+		string text8 = string.Empty;
+		string text9 = string.Empty;
 		string slotname = string.Empty;
+		int version = 100;
 		for (;;)
 		{
 			try
 			{
 				for (;;)
 				{
-					IL_90:
+					IL_102:
 					int num3 = (int)binaryReader.ReadByte();
-					text6 = text5;
-					text5 = string.Empty;
+					text8 = text7;
+					text7 = string.Empty;
 					if (num3 == 0)
 					{
 						break;
 					}
 					for (int i = 0; i < num3; i++)
 					{
-						text5 = text5 + "\"" + binaryReader.ReadString() + "\" ";
+						text7 = text7 + "\"" + binaryReader.ReadString() + "\" ";
 					}
-					if (!(text5 == string.Empty))
+					if (!(text7 == string.Empty))
 					{
-						goto IL_F5;
+						goto IL_169;
 					}
 				}
 				break;
-				IL_F5:
-				string stringCom = UTY.GetStringCom(text5);
-				string[] stringList = UTY.GetStringList(text5);
+				IL_169:
+				string stringCom = UTY.GetStringCom(text7);
+				string[] stringList = UTY.GetStringList(text7);
 				if (stringCom == "end")
 				{
 					break;
 				}
 				if (stringCom == "name")
 				{
-					goto IL_1057;
+					goto IL_13C4;
+				}
+				if (stringCom == "ver")
+				{
+					TBodySkin slot2 = body.GetSlot(stringList[1]);
+					version = int.Parse(stringList[2]);
+					goto IL_13C4;
 				}
 				if (stringCom == "アイテム")
 				{
 					Menu.SetMaidItemTemp(maid, stringList[1], f_bTemp);
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "アイテム条件")
 				{
@@ -161,46 +212,46 @@ public class Menu : MonoBehaviour
 					if (stringList[2] == "に何か")
 					{
 						bool flag2 = false;
-						TBodySkin slot = body.GetSlot(slotname2);
+						TBodySkin slot3 = body.GetSlot(slotname2);
 						if (stringList[3] == "有る")
 						{
-							if (slot.obj != null)
+							if (slot3.obj != null)
 							{
 								flag2 = true;
 							}
 						}
 						else if (stringList[3] == "無い")
 						{
-							if (slot.obj == null)
+							if (slot3.obj == null)
 							{
 								flag2 = true;
 							}
 						}
 						else
 						{
-							NDebug.Assert("アイテム条件が不正です。「有る」か「無い」かを指定してください。\n" + text5, false);
+							NDebug.Assert("アイテム条件が不正です。「有る」か「無い」かを指定してください。\n" + text7, false);
 						}
 						if (stringList[4] == "なら")
 						{
 							if (flag2)
 							{
 								Menu.SetMaidItemTemp(maid, stringList[5], f_bTemp);
-								goto IL_222;
+								goto IL_2C3;
 							}
-							goto IL_222;
-							IL_222:
-							goto IL_239;
+							goto IL_2C3;
+							IL_2C3:
+							goto IL_2DA;
 						}
-						NDebug.Assert("アイテム条件が不正です。「なら」が必要です。\n" + text5, false);
-						goto IL_239;
-						IL_239:
-						goto IL_36D;
+						NDebug.Assert("アイテム条件が不正です。「なら」が必要です。\n" + text7, false);
+						goto IL_2DA;
+						IL_2DA:
+						goto IL_40E;
 					}
 					if (stringList[2] == "が")
 					{
 						bool flag3 = false;
-						TBodySkin slot2 = body.GetSlot(slotname2);
-						if (slot2.m_strModelFileName == stringList[3])
+						TBodySkin slot4 = body.GetSlot(slotname2);
+						if (slot4.m_strModelFileName == stringList[3])
 						{
 							flag3 = true;
 						}
@@ -209,24 +260,24 @@ public class Menu : MonoBehaviour
 							if (flag3)
 							{
 								Menu.SetMaidItemTemp(maid, stringList[5], f_bTemp);
-								goto IL_29E;
+								goto IL_33F;
 							}
-							goto IL_29E;
-							IL_29E:
-							goto IL_2B5;
+							goto IL_33F;
+							IL_33F:
+							goto IL_356;
 						}
-						NDebug.Assert("アイテム条件が不正です。「なら」が必要です。\n" + text5, false);
-						goto IL_2B5;
-						IL_2B5:
-						goto IL_36D;
+						NDebug.Assert("アイテム条件が不正です。「なら」が必要です。\n" + text7, false);
+						goto IL_356;
+						IL_356:
+						goto IL_40E;
 					}
 					if (!(stringList[2] == "のアイテムパラメータの"))
 					{
-						goto IL_36D;
+						goto IL_40E;
 					}
 					bool flag4 = false;
-					TBodySkin slot3 = body.GetSlot(slotname2);
-					string param = slot3.GetParam(stringList[3].ToLower());
+					TBodySkin slot5 = body.GetSlot(slotname2);
+					string param = slot5.GetParam(stringList[3].ToLower());
 					if (stringList[4] == "が")
 					{
 						if (stringList[5].ToLower() == param)
@@ -236,104 +287,144 @@ public class Menu : MonoBehaviour
 					}
 					else
 					{
-						NDebug.Assert("アイテム条件が不正です。「が」が必要です。\n" + text5, false);
+						NDebug.Assert("アイテム条件が不正です。「が」が必要です。\n" + text7, false);
 					}
 					if (stringList[6] == "なら")
 					{
 						if (flag4)
 						{
 							Menu.SetMaidItemTemp(maid, stringList[7], f_bTemp);
-							goto IL_356;
+							goto IL_3F7;
 						}
-						goto IL_356;
-						IL_356:
-						goto IL_36D;
+						goto IL_3F7;
+						IL_3F7:
+						goto IL_40E;
 					}
-					NDebug.Assert("アイテム条件が不正です。「なら」が必要です。\n" + text5, false);
-					goto IL_36D;
-					IL_36D:
-					goto IL_1057;
+					NDebug.Assert("アイテム条件が不正です。「なら」が必要です。\n" + text7, false);
+					goto IL_40E;
+					IL_40E:
+					goto IL_13C4;
+				}
+				if (stringCom == "if")
+				{
+					if (stringList[1].IndexOf("maidprop[") != 0)
+					{
+						goto IL_58E;
+					}
+					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_58E;
+					}
+					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_58E;
+					}
+					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_58E;
+					}
+					goto IL_58E;
+					IL_58E:
+					goto IL_13C4;
 				}
 				if (stringCom == "アイテムパラメータ")
 				{
 					if (stringList.Length == 4)
 					{
-						string text8 = stringList[1];
-						string text9 = stringList[2].ToLower();
-						string text10 = stringList[3].ToLower();
+						string text11 = stringList[1];
+						string text12 = stringList[2].ToLower();
+						string text13 = stringList[3].ToLower();
 						list.Add(new Menu.LastParam(0, stringCom, new string[]
 						{
-							text8,
-							text9,
-							text10
+							text11,
+							text12,
+							text13
 						}));
-						goto IL_3E2;
+						goto IL_603;
 					}
-					Debug.LogError("アイテムパラメータ 命令の引数が不正です。SlotNameを明示的に指定しする必要があります。アイテムパラメータ <スロット名> <変数名> <値> の順です。" + text5);
-					goto IL_3E2;
-					IL_3E2:
-					goto IL_1057;
+					Debug.LogError("アイテムパラメータ 命令の引数が不正です。SlotNameを明示的に指定しする必要があります。アイテムパラメータ <スロット名> <変数名> <値> の順です。" + text7);
+					goto IL_603;
+					IL_603:
+					goto IL_13C4;
 				}
 				if (stringCom == "半脱ぎ" || stringCom == "リソース参照")
 				{
 					string key;
-					string value;
+					string value4;
 					if (stringCom == "半脱ぎ")
 					{
 						key = "半脱ぎ";
-						value = stringList[1];
+						value4 = stringList[1];
 					}
 					else
 					{
 						key = stringList[1];
-						value = stringList[2];
+						value4 = stringList[2];
 					}
-					int hashCode = Path.GetFileName(filename.ToLower()).ToLower().GetHashCode();
+					int hashCode = Path.GetFileName(text.ToLower()).ToLower().GetHashCode();
 					SortedDictionary<string, string> sortedDictionary;
 					if (Menu.m_dicResourceRef.TryGetValue(hashCode, out sortedDictionary))
 					{
 						string empty = string.Empty;
 						if (sortedDictionary.TryGetValue(key, out empty))
 						{
-							sortedDictionary[key] = value;
-							goto IL_494;
+							sortedDictionary[key] = value4;
+							goto IL_6B5;
 						}
-						sortedDictionary.Add(key, value);
-						goto IL_494;
-						IL_494:
-						goto IL_4B9;
+						sortedDictionary.Add(key, value4);
+						goto IL_6B5;
+						IL_6B5:
+						goto IL_6DA;
 					}
 					sortedDictionary = new SortedDictionary<string, string>();
-					sortedDictionary.Add(key, value);
+					sortedDictionary.Add(key, value4);
 					Menu.m_dicResourceRef.Add(hashCode, sortedDictionary);
-					goto IL_4B9;
-					IL_4B9:
-					goto IL_1057;
+					goto IL_6DA;
+					IL_6DA:
+					goto IL_13C4;
 				}
 				if (stringCom == "set")
 				{
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "setname")
 				{
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "setslotitem")
 				{
 					string tag = stringList[1];
 					uint val = uint.Parse(stringList[2]);
 					maid.SetProp(tag, (int)val, false);
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "additem")
 				{
-					string text11 = text7;
+					string text14 = text9;
 					if (stringList.Length > 1)
 					{
-						text11 = stringList[2];
+						text14 = stringList[2];
 					}
-					slotname = text11;
-					if (text11 == "body")
+					slotname = text14;
+					if (text14 == "body")
 					{
 						body.LoadBody_R(stringList[1], maid);
 					}
@@ -352,77 +443,77 @@ public class Menu : MonoBehaviour
 						attachSlot = "ボーンにアタッチ";
 						attachName = stringList[4];
 					}
-					if (text11 == "handitemr")
+					if (text14 == "handitemr")
 					{
 						attachSlot = "ボーンにアタッチ";
 						attachName = "_IK_handR";
 					}
-					if (text11 == "handiteml")
+					if (text14 == "handiteml")
 					{
 						attachSlot = "ボーンにアタッチ";
 						attachName = "_IK_handL";
 					}
-					body.AddItem((MPN)Enum.Parse(typeof(MPN), text7, true), text11, stringList[1], attachSlot, attachName, f_bTemp);
-					body.SetVisibleNodeSlot(text11, true, "_ALL_");
-					goto IL_1057;
+					body.AddItem((MPN)Enum.Parse(typeof(MPN), text9, true), text14, stringList[1], attachSlot, attachName, f_bTemp, version);
+					body.SetVisibleNodeSlot(text14, true, "_ALL_");
+					goto IL_13C4;
 				}
 				if (stringCom == "nofloory")
 				{
 					TBody.SlotID index = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), stringList[1], true);
 					body.goSlot[(int)index].m_bHitFloorY = false;
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "saveitem")
 				{
-					text3 = stringList[1];
-					goto IL_1057;
+					text5 = stringList[1];
+					goto IL_13C4;
 				}
 				if (stringCom == "category")
 				{
-					text7 = stringList[1];
-					goto IL_1057;
+					text9 = stringList[1];
+					goto IL_13C4;
 				}
 				if (stringCom == "maskitem")
 				{
 					if (stringList.Length > 1)
 					{
 						string maskslot = stringList[1];
-						body.AddMask(text7, maskslot);
-						goto IL_6E7;
+						body.AddMask(text9, maskslot);
+						goto IL_90A;
 					}
-					goto IL_6E7;
-					IL_6E7:
-					goto IL_1057;
+					goto IL_90A;
+					IL_90A:
+					goto IL_13C4;
 				}
 				if (stringCom == "delitem")
 				{
-					string slotname3 = text7;
+					string slotname3 = text9;
 					if (stringList.Length > 1)
 					{
 						slotname3 = stringList[1];
 					}
-					body.DelItem((MPN)Enum.Parse(typeof(MPN), text7, true), slotname3);
-					goto IL_1057;
+					body.DelItem((MPN)Enum.Parse(typeof(MPN), text9, true), slotname3);
+					goto IL_13C4;
 				}
 				if (stringCom == "node消去")
 				{
-					body.SetVisibleNodeSlot(text7, false, stringList[1]);
-					goto IL_1057;
+					body.SetVisibleNodeSlot(text9, false, stringList[1]);
+					goto IL_13C4;
 				}
 				if (stringCom == "node表示")
 				{
-					body.SetVisibleNodeSlot(text7, true, stringList[1]);
-					goto IL_1057;
+					body.SetVisibleNodeSlot(text9, true, stringList[1]);
+					goto IL_13C4;
 				}
 				if (stringCom == "パーツnode消去")
 				{
-					body.SetVisibleNodeSlotParts(text7, stringList[1], false, stringList[2]);
-					goto IL_1057;
+					body.SetVisibleNodeSlotParts(text9, stringList[1], false, stringList[2]);
+					goto IL_13C4;
 				}
 				if (stringCom == "パーツnode表示")
 				{
-					body.SetVisibleNodeSlotParts(text7, stringList[1], true, stringList[2]);
-					goto IL_1057;
+					body.SetVisibleNodeSlotParts(text9, stringList[1], true, stringList[2]);
+					goto IL_13C4;
 				}
 				if (stringCom == "color")
 				{
@@ -431,58 +522,62 @@ public class Menu : MonoBehaviour
 					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);
 					body.ChangeCol(name, matno, prop_name, col);
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "mancolor")
 				{
 					Color manColor = new Color(float.Parse(stringList[1]) / 255f, float.Parse(stringList[2]) / 255f, float.Parse(stringList[3]) / 255f, 1f);
 					maid.ManColor = manColor;
 					maid.ManColorUpdate();
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "tex" || stringCom == "テクスチャ変更")
 				{
-					string text12 = stringList[1];
+					string text15 = stringList[1];
 					int matno2 = int.Parse(stringList[2]);
 					string prop_name2 = stringList[3];
-					string filename2 = stringList[4];
+					string filename = stringList[4];
 					MaidParts.PARTS_COLOR parts_COLOR = MaidParts.PARTS_COLOR.NONE;
 					if (stringList.Length == 6)
 					{
-						string text13 = stringList[5];
+						string text16 = stringList[5];
 						try
 						{
-							parts_COLOR = (MaidParts.PARTS_COLOR)Enum.Parse(typeof(MaidParts.PARTS_COLOR), text13.ToUpper());
+							parts_COLOR = (MaidParts.PARTS_COLOR)Enum.Parse(typeof(MaidParts.PARTS_COLOR), text16.ToUpper());
 						}
 						catch
 						{
-							NDebug.Assert("無限色IDがありません。" + text13, false);
+							NDebug.Assert("無限色IDがありません。" + text16, false);
 						}
 					}
-					body.ChangeTex(text12, matno2, prop_name2, filename2, null, parts_COLOR);
+					if (mp.idx == 61)
+					{
+						matno2 = 7;
+					}
+					body.ChangeTex(text15, matno2, prop_name2, filename, null, parts_COLOR);
 					if (parts_COLOR != MaidParts.PARTS_COLOR.NONE)
 					{
 						maid.Parts.SetPartsColor(parts_COLOR, maid.Parts.GetPartsColor(parts_COLOR));
 					}
-					if ((text7 == "skin" || text7 == "haircolor") && !flag)
+					if ((text9 == "skin" || text9 == "haircolor") && !flag)
 					{
-						body.RestoreShader(text12);
-						goto IL_994;
+						body.RestoreShader(text15);
+						goto IL_BC7;
 					}
-					goto IL_994;
-					IL_994:
-					goto IL_1057;
+					goto IL_BC7;
+					IL_BC7:
+					goto IL_13C4;
 				}
 				if (stringCom == "prop")
 				{
 					string tag2 = stringList[1];
 					string s = stringList[2];
 					maid.SetProp(tag2, int.Parse(s), false);
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "テクスチャ乗算")
 				{
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "テクスチャ合成")
 				{
@@ -490,15 +585,15 @@ public class Menu : MonoBehaviour
 					{
 						NDebug.Assert("テクスチャ合成 の引数が不正です。" + stringList.Length, false);
 					}
-					if ((text7 == "accTatoo" || text7 == "hokuro") && !filename.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);
-						goto IL_AF7;
+						goto IL_D2A;
 					}
 					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_AF7;
-					IL_AF7:
-					goto IL_1057;
+					goto IL_D2A;
+					IL_D2A:
+					goto IL_13C4;
 				}
 				if (stringCom == "テクスチャセット合成")
 				{
@@ -507,7 +602,7 @@ public class Menu : MonoBehaviour
 						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);
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "マテリアル変更")
 				{
@@ -515,7 +610,7 @@ public class Menu : MonoBehaviour
 					int f_nMatNo = int.Parse(stringList[2]);
 					string f_strFileName = stringList[3];
 					body.ChangeMaterial(f_strSlotName, f_nMatNo, f_strFileName);
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "shader")
 				{
@@ -524,14 +619,14 @@ public class Menu : MonoBehaviour
 					string f_strShaderFileName = stringList[3];
 					body.ChangeShader(f_strSlotName2, f_nMatNo2, f_strShaderFileName);
 					flag = true;
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "アタッチポイントの設定")
 				{
 					if (stringList.Length < 5)
 					{
-						Debug.LogError("アタッチポイントの設定引数の数が不正です。 " + text5 + " " + str);
-						goto IL_CBA;
+						Debug.LogError("アタッチポイントの設定引数の数が不正です。 " + text7 + " " + text3);
+						goto IL_EED;
 					}
 					Vector3 v = new Vector3(float.Parse(stringList[2]), float.Parse(stringList[3]), float.Parse(stringList[4]));
 					Quaternion q = Quaternion.identity;
@@ -541,12 +636,12 @@ public class Menu : MonoBehaviour
 					}
 					else
 					{
-						Debug.LogError("アタッチポイントの設定引数に角度指定がありません。 " + text5 + "  " + str);
+						Debug.LogError("アタッチポイントの設定引数に角度指定がありません。 " + text7 + "  " + text3);
 					}
 					body.SetAttachPoint(slotname, stringList[1], v, q, f_bTemp);
-					goto IL_CBA;
-					IL_CBA:
-					goto IL_1057;
+					goto IL_EED;
+					IL_EED:
+					goto IL_13C4;
 				}
 				if (stringCom == "blendset")
 				{
@@ -559,12 +654,12 @@ public class Menu : MonoBehaviour
 						float val2 = float.Parse(stringList[3 + j * 2]);
 						body.Face.morph.SetValueBlendSet(blendSetName, tag3, val2);
 					}
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "paramset")
 				{
-					body.Face.NewParamSet(text5);
-					goto IL_1057;
+					body.Face.NewParamSet(text7);
+					goto IL_13C4;
 				}
 				if (stringCom == "commenttype")
 				{
@@ -573,42 +668,80 @@ public class Menu : MonoBehaviour
 						maid.status.partsDic.Add(stringList[1], string.Empty);
 					}
 					maid.status.partsDic[stringList[1]] = stringList[2];
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "useredit")
 				{
 					if (stringList[2].ToLower() == "material")
 					{
-						body.SetMaterialProperty(text7, stringList[3], int.Parse(stringList[4]), stringList[5], stringList[6], stringList[7], false);
-						goto IL_E12;
+						body.SetMaterialProperty(text9, stringList[3], int.Parse(stringList[4]), stringList[5], stringList[6], stringList[7], false);
+						goto IL_1045;
 					}
-					goto IL_E12;
-					IL_E12:
-					goto IL_1057;
+					goto IL_1045;
+					IL_1045:
+					goto IL_13C4;
 				}
 				if (stringCom == "bonemorph")
 				{
-					if (stringList.Length < 9)
+					if (9 > stringList.Length || stringList.Length > 10)
+					{
+						Debug.LogError("BoneMorpの設定引数の数が不正です。 " + text7 + " " + text3);
+					}
+					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])));
+						goto IL_120B;
+					}
+					string text17 = stringList[1].ToLower();
+					string strPropName = stringList[2];
+					string f_strBoneName = stringList[3];
+					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]));
+					if (text17 != null)
 					{
-						Debug.LogError("BoneMorpの設定引数の数が不正です。 " + text5 + " " + str);
+						if (text17 == "pos")
+						{
+							body.bonemorph.ChangeMorphPosValue(strPropName, f_strBoneName, f_fAddMin, f_fAddMax);
+							goto IL_120B;
+						}
+						if (text17 == "rot")
+						{
+							body.bonemorph.ChangeMorphRotatioValue(strPropName, f_strBoneName, f_fAddMin, f_fAddMax);
+							goto IL_120B;
+						}
+						if (text17 == "scl")
+						{
+							body.bonemorph.ChangeMorphSclValue(strPropName, f_strBoneName, f_fAddMin, f_fAddMax);
+							goto IL_120B;
+						}
 					}
-					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_1057;
+					Debug.LogError(string.Concat(new string[]
+					{
+						"BoneMorpのタイプ指定が不正です[",
+						text17,
+						"]\n",
+						text7,
+						" ",
+						text3
+					}));
+					goto IL_120B;
+					IL_120B:
+					goto IL_13C4;
 				}
 				if (stringCom == "length")
 				{
 					if (stringList.Length != 11)
 					{
-						Debug.LogError("lengthの設定引数の数が不正です。 " + text5 + " " + str);
+						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])));
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "anime")
 				{
 					if (stringList.Length < 3)
 					{
-						Debug.LogError("animeの設定引数の数が不正です。 " + text5 + " " + str);
+						Debug.LogError("animeの設定引数の数が不正です。 " + text7 + " " + text3);
 					}
 					TBody.SlotID f_slot = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), stringList[1], true);
 					body.ItemAnimationLoad(f_slot, stringList[2]);
@@ -618,7 +751,7 @@ public class Menu : MonoBehaviour
 						f_bLoop = (stringList[3] == "loop");
 					}
 					body.ItemAnimationPlay(f_slot, stringList[2], f_bLoop);
-					goto IL_1057;
+					goto IL_13C4;
 				}
 				if (stringCom == "param2")
 				{
@@ -626,44 +759,44 @@ public class Menu : MonoBehaviour
 					{
 						string slotname4 = stringList[1];
 						body.GetSlot(slotname4).SetParam2(stringList[2], stringList[3]);
-						goto IL_1011;
+						goto IL_137E;
 					}
-					Debug.LogError("param2の設定引数の数が不正です。 " + text5 + " " + str);
-					goto IL_1011;
-					IL_1011:
-					goto IL_1057;
+					Debug.LogError("param2の設定引数の数が不正です。 " + text7 + " " + text3);
+					goto IL_137E;
+					IL_137E:
+					goto IL_13C4;
 				}
 				if (stringCom == "animematerial")
 				{
 					TBody.SlotID f_slot2 = (TBody.SlotID)Enum.Parse(typeof(TBody.SlotID), stringList[1], true);
 					string s2 = stringList[2];
 					body.MaterialAnimatorAdd(f_slot2, int.Parse(s2));
-					goto IL_1057;
+					goto IL_13C4;
 				}
-				goto IL_1057;
-				IL_1057:
-				goto IL_10DA;
+				goto IL_13C4;
+				IL_13C4:
+				goto IL_1447;
 			}
 			catch (Exception ex)
 			{
 				Debug.LogError(string.Concat(new string[]
 				{
 					"Exception ",
-					Path.GetFileName(filename),
+					Path.GetFileName(text),
 					" 現在処理中だった行 = ",
-					text5,
+					text7,
 					" 以前の行 = ",
-					text6,
+					text8,
 					"   ",
 					ex.Message,
 					"StackTrace:\n",
 					ex.StackTrace
 				}));
-				NDebug.Assert("メニューファイル処理中にエラーが発生しました。" + Path.GetFileName(filename), true);
-				goto IL_10DA;
+				NDebug.Assert("メニューファイル処理中にエラーが発生しました。" + Path.GetFileName(text), true);
+				goto IL_1447;
 			}
-			IL_10DA:
-			goto IL_90;
+			IL_1447:
+			goto IL_102;
 		}
 		list.Sort((Menu.LastParam a, Menu.LastParam b) => a.nOrder - a.nOrder);
 		for (int k = 0; k < list.Count; k++)
@@ -671,8 +804,8 @@ public class Menu : MonoBehaviour
 			Menu.LastParam lastParam = list[k];
 			if (lastParam.strComm == "アイテムパラメータ")
 			{
-				TBodySkin slot4 = body.GetSlot(lastParam.aryArgs[0]);
-				slot4.SetParam(lastParam.aryArgs[1], lastParam.aryArgs[2]);
+				TBodySkin slot6 = body.GetSlot(lastParam.aryArgs[0]);
+				slot6.SetParam(lastParam.aryArgs[1], lastParam.aryArgs[2]);
 			}
 		}
 		binaryReader.Close();
@@ -753,7 +886,7 @@ public class Menu : MonoBehaviour
 			Directory.CreateDirectory(text);
 		}
 		StreamWriter streamWriter = new StreamWriter(text + "\\" + text2 + ".txt", false, Encoding.UTF8);
-		streamWriter.WriteLine("出力バージョン\t" + 1210);
+		streamWriter.WriteLine("出力バージョン\t" + 1230);
 		streamWriter.WriteLine("基本アイテム\t" + filename.Replace(" ", ":"));
 		try
 		{

+ 1 - 1
Assembly-CSharp/Misc.cs

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

+ 3 - 3
Assembly-CSharp/ModCompile.cs

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

+ 1 - 1
Assembly-CSharp/MotionKagManager.cs

@@ -89,7 +89,7 @@ public class MotionKagManager : BaseKagManager
 
 	private bool TagMotAllProcPropSeqStart(KagTagSupport tag_data)
 	{
-		Maid maidAndMan = base.GetMaidAndMan(tag_data);
+		Maid maidAndMan = base.GetMaidAndMan(tag_data, true);
 		if (maidAndMan == null)
 		{
 			return false;

+ 15 - 6
Assembly-CSharp/MotionWindow.cs

@@ -10,19 +10,26 @@ public class MotionWindow : BaseMaidPhotoWindow
 		base.Awake();
 		PhotoMotionData.Create();
 		this.noCharaActive = base.GetComponentInChildren<PhotoNoCharaActive>();
-		Dictionary<string, List<KeyValuePair<string, object>>> dictionary = new Dictionary<string, List<KeyValuePair<string, object>>>();
+		Dictionary<string, List<string>> dictionary = new Dictionary<string, List<string>>();
+		Dictionary<string, List<KeyValuePair<string, object>>> dictionary2 = new Dictionary<string, List<KeyValuePair<string, object>>>();
 		foreach (KeyValuePair<string, List<PhotoMotionData>> keyValuePair in PhotoMotionData.category_list)
 		{
-			if (!dictionary.ContainsKey(keyValuePair.Key))
+			if (!dictionary2.ContainsKey(keyValuePair.Key))
 			{
-				dictionary.Add(keyValuePair.Key, new List<KeyValuePair<string, object>>());
+				dictionary2.Add(keyValuePair.Key, new List<KeyValuePair<string, object>>());
+				dictionary.Add(keyValuePair.Key, new List<string>());
 			}
 			for (int i = 0; i < keyValuePair.Value.Count; i++)
 			{
-				dictionary[keyValuePair.Key].Add(new KeyValuePair<string, object>(keyValuePair.Value[i].name, keyValuePair.Value[i]));
+				dictionary2[keyValuePair.Key].Add(new KeyValuePair<string, object>(keyValuePair.Value[i].name, keyValuePair.Value[i]));
+				dictionary[keyValuePair.Key].Add(keyValuePair.Value[i].nameTerm);
 			}
 		}
-		this.PopupAndTabList.SetData(dictionary, true);
+		if (!GameUty.supportMultiLanguage)
+		{
+			dictionary = null;
+		}
+		this.PopupAndTabList.SetData(dictionary2, dictionary, true);
 		this.PopupAndTabList.onChangePopUpListValue.Add(new Action<KeyValuePair<string, UnityEngine.Object>>(this.OnChangePopUpList));
 		this.PopupAndTabList.onSelect.Add(new Action<object>(this.OnSelectItem));
 		UTY.GetChildObject(this.content_game_object, "ListParent/DragMat", false).GetComponent<BoxCollider>().enabled = false;
@@ -147,7 +154,7 @@ public class MotionWindow : BaseMaidPhotoWindow
 		}
 		if (!check_box.check && this.pose_edit_window_.CheckbtnUse.check)
 		{
-			GameMain.Instance.SysDlg.Show("ポーズエディットのセーブしていないデータは失われます。\nOFFにしますか?", SystemDialog.TYPE.YES_NO, delegate
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/ポーズ/ポーズエディットのセーブしていないデータは失われます。OFFにしますか?", null, SystemDialog.TYPE.YES_NO, delegate
 			{
 				this.pose_edit_window_.CheckbtnUse.check = false;
 				this.pose_edit_window_.OnClickUseCheckRun(false);
@@ -201,6 +208,7 @@ public class MotionWindow : BaseMaidPhotoWindow
 		if (maid == null)
 		{
 			UTY.GetChildObject(this.content_game_object, "ListParent/DragMat", false).GetComponent<BoxCollider>().enabled = false;
+			this.PopupAndTabList.popup_term_list = null;
 			this.PopupAndTabList.popup_value_list = null;
 			this.PopupAndTabList.SetPopupValue(this.PopupAndTabList.popup_value_list[0].Key);
 		}
@@ -209,6 +217,7 @@ public class MotionWindow : BaseMaidPhotoWindow
 			UTY.GetChildObject(this.content_game_object, "ListParent/DragMat", false).GetComponent<BoxCollider>().enabled = true;
 			Dictionary<string, string> maidStoreData = base.GetMaidStoreData(maid);
 			PhotoMotionData photoMotionData = PhotoMotionData.Get(long.Parse(maidStoreData["id"]));
+			this.PopupAndTabList.popup_term_list = ((!GameUty.supportMultiLanguage) ? null : (maid.boMAN ? PhotoMotionData.popup_category_term_list_for_man : PhotoMotionData.popup_category_term_list));
 			this.PopupAndTabList.popup_value_list = (maid.boMAN ? PhotoMotionData.popup_category_list_for_man : PhotoMotionData.popup_category_list);
 			this.PopupAndTabList.SetPopupValue(photoMotionData.category);
 			this.PopupAndTabList.SetSelectButton(photoMotionData, false);

+ 4 - 0
Assembly-CSharp/MouseExposition.cs

@@ -160,6 +160,10 @@ public class MouseExposition : MonoBehaviour
 			{
 				this.text = translation;
 			}
+			else
+			{
+				this.text = Utility.GetTermLastWord(value);
+			}
 		}
 	}
 

+ 243 - 0
Assembly-CSharp/NGUILabelLocalizeSupport.cs

@@ -0,0 +1,243 @@
+using System;
+using I2.Loc;
+using UnityEngine;
+using UnityEngine.Events;
+
+[DisallowMultipleComponent]
+[RequireComponent(typeof(Localize))]
+[RequireComponent(typeof(UILabel))]
+public class NGUILabelLocalizeSupport : MonoBehaviour
+{
+	public NGUILabelLocalizeSupport()
+	{
+		NGUILabelLocalizeSupport.OverRideProperty overRideProperty = default(NGUILabelLocalizeSupport.OverRideProperty);
+		overRideProperty.overFlow.enabled = true;
+		overRideProperty.overFlow.value = UILabel.Overflow.ShrinkContent;
+		overRideProperty.SpacingX.enabled = true;
+		overRideProperty.SpacingY.enabled = true;
+		this.overRidePropertys = overRideProperty;
+		base..ctor();
+	}
+
+	private void Awake()
+	{
+		if (this.callAwake)
+		{
+			return;
+		}
+		this.callAwake = true;
+		this.localize = base.GetComponent<Localize>();
+		this.label = base.GetComponent<UILabel>();
+		if (this.localize != null && this.label != null)
+		{
+			this.localize.LocalizeEvent.AddListener(new UnityAction(this.OnLocalize));
+			this.holdOverflow = this.label.overflowMethod;
+			this.holdAlignment = this.label.alignment;
+			this.holdFontSize = this.label.fontSize;
+			if (this.label.useFloatSpacing)
+			{
+				this.holdSpacingX = this.label.floatSpacingX;
+				this.holdSpacingY = this.label.floatSpacingY;
+			}
+			else
+			{
+				this.holdSpacingX = (float)this.label.spacingX;
+				this.holdSpacingY = (float)this.label.spacingY;
+			}
+			this.holdWidgetSizeX = this.label.width;
+			this.holdWidgetSizeY = this.label.height;
+			this.holdMaxLines = this.label.maxLineCount;
+			this.updateReq = true;
+			this.OnLocalize();
+		}
+	}
+
+	public void OnLocalize()
+	{
+		if (!this.callAwake)
+		{
+			this.Awake();
+		}
+		if (!this.updateReq)
+		{
+			return;
+		}
+		if (LocalizationManager.CurrentLanguageCode == "ja")
+		{
+			if (this.holdOverflow != UILabel.Overflow.ResizeFreely)
+			{
+				this.label.width = this.holdWidgetSizeX;
+			}
+			if (this.holdOverflow != UILabel.Overflow.ResizeHeight)
+			{
+				this.label.height = this.holdWidgetSizeY;
+			}
+			this.label.fontSize = this.holdFontSize;
+			if (this.label.useFloatSpacing)
+			{
+				this.label.floatSpacingX = this.holdSpacingX;
+				this.label.floatSpacingY = this.holdSpacingY;
+			}
+			else
+			{
+				this.label.spacingX = (int)this.holdSpacingX;
+				this.label.spacingY = (int)this.holdSpacingY;
+			}
+			this.label.maxLineCount = this.holdMaxLines;
+			this.label.alignment = this.holdAlignment;
+			this.label.overflowMethod = this.holdOverflow;
+		}
+		else
+		{
+			this.Apply(this.overRidePropertys);
+			if (this.languageOverRidePropertys != null)
+			{
+				foreach (NGUILabelLocalizeSupport.LanguageOverRideProperty languageOverRideProperty in this.languageOverRidePropertys)
+				{
+					if (languageOverRideProperty.LanguageCode == LocalizationManager.CurrentLanguageCode)
+					{
+						this.Apply(languageOverRideProperty.Property);
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	public void Apply(NGUILabelLocalizeSupport.OverRideProperty property)
+	{
+		UILabel.Overflow overflow = (!property.overFlow.enabled) ? this.holdOverflow : property.overFlow.value;
+		if (overflow != UILabel.Overflow.ResizeFreely)
+		{
+			this.label.width = ((!property.widgetSizeX.enabled) ? this.holdWidgetSizeX : property.widgetSizeX.value);
+		}
+		if (overflow != UILabel.Overflow.ResizeHeight)
+		{
+			this.label.height = ((!property.widgetSizeY.enabled) ? this.holdWidgetSizeY : property.widgetSizeY.value);
+		}
+		this.label.fontSize = ((!property.fontSize.enabled) ? this.holdFontSize : property.fontSize.value);
+		if (property.SpacingX.enabled)
+		{
+			if (this.label.useFloatSpacing)
+			{
+				this.label.floatSpacingX = (float)property.SpacingX.value;
+			}
+			else
+			{
+				this.label.spacingX = property.SpacingX.value;
+			}
+		}
+		else if (this.label.useFloatSpacing)
+		{
+			this.label.floatSpacingX = this.holdSpacingX;
+		}
+		else
+		{
+			this.label.spacingX = (int)this.holdSpacingX;
+		}
+		if (property.SpacingY.enabled)
+		{
+			if (this.label.useFloatSpacing)
+			{
+				this.label.floatSpacingY = (float)property.SpacingY.value;
+			}
+			else
+			{
+				this.label.spacingY = property.SpacingY.value;
+			}
+		}
+		else if (this.label.useFloatSpacing)
+		{
+			this.label.floatSpacingY = this.holdSpacingY;
+		}
+		else
+		{
+			this.label.spacingY = (int)this.holdSpacingY;
+		}
+		this.label.maxLineCount = ((!property.maxLines.enabled) ? this.holdMaxLines : property.maxLines.value);
+		this.label.alignment = ((!property.alignment.enabled) ? this.holdAlignment : property.alignment.value);
+		this.label.overflowMethod = overflow;
+	}
+
+	[SerializeField]
+	public NGUILabelLocalizeSupport.OverRideProperty overRidePropertys;
+
+	[SerializeField]
+	public NGUILabelLocalizeSupport.LanguageOverRideProperty[] languageOverRidePropertys;
+
+	private UILabel.Overflow holdOverflow;
+
+	private NGUIText.Alignment holdAlignment;
+
+	private int holdFontSize;
+
+	private float holdSpacingX;
+
+	private float holdSpacingY;
+
+	private int holdWidgetSizeX;
+
+	private int holdWidgetSizeY;
+
+	private int holdMaxLines;
+
+	private bool updateReq;
+
+	private bool callAwake;
+
+	private Localize localize;
+
+	private UILabel label;
+
+	[Serializable]
+	public struct OverRideProperty
+	{
+		public NGUILabelLocalizeSupport.OverRideProperty.OverflowValue overFlow;
+
+		public NGUILabelLocalizeSupport.OverRideProperty.AlignmentValue alignment;
+
+		public NGUILabelLocalizeSupport.OverRideProperty.IntValue fontSize;
+
+		public NGUILabelLocalizeSupport.OverRideProperty.IntValue SpacingX;
+
+		public NGUILabelLocalizeSupport.OverRideProperty.IntValue SpacingY;
+
+		public NGUILabelLocalizeSupport.OverRideProperty.IntValue widgetSizeX;
+
+		public NGUILabelLocalizeSupport.OverRideProperty.IntValue widgetSizeY;
+
+		public NGUILabelLocalizeSupport.OverRideProperty.IntValue maxLines;
+
+		[Serializable]
+		public struct IntValue
+		{
+			public bool enabled;
+
+			public int value;
+		}
+
+		[Serializable]
+		public struct OverflowValue
+		{
+			public bool enabled;
+
+			public UILabel.Overflow value;
+		}
+
+		[Serializable]
+		public struct AlignmentValue
+		{
+			public bool enabled;
+
+			public NGUIText.Alignment value;
+		}
+	}
+
+	[Serializable]
+	public struct LanguageOverRideProperty
+	{
+		public string LanguageCode;
+
+		public NGUILabelLocalizeSupport.OverRideProperty Property;
+	}
+}

+ 0 - 87
Assembly-CSharp/NGUILabelSpacingHold.cs

@@ -1,87 +0,0 @@
-using System;
-using I2.Loc;
-using UnityEngine;
-using UnityEngine.Events;
-
-[RequireComponent(typeof(Localize))]
-[RequireComponent(typeof(UILabel))]
-public class NGUILabelSpacingHold : MonoBehaviour
-{
-	private void Awake()
-	{
-		if (this.callAwake)
-		{
-			return;
-		}
-		this.callAwake = true;
-		this.localize = base.GetComponent<Localize>();
-		this.label = base.GetComponent<UILabel>();
-		if (this.localize != null && this.label != null)
-		{
-			this.localize.LocalizeEvent.AddListener(new UnityAction(this.OnLocalize));
-			if (this.label.useFloatSpacing)
-			{
-				this.HoldSpacingX = this.label.floatSpacingX;
-				this.HoldSpacingY = this.label.floatSpacingY;
-			}
-			else
-			{
-				this.HoldSpacingX = (float)this.label.spacingX;
-				this.HoldSpacingY = (float)this.label.spacingY;
-			}
-			this.updateReq = true;
-			this.OnLocalize();
-		}
-	}
-
-	public void OnLocalize()
-	{
-		if (!this.callAwake)
-		{
-			this.Awake();
-		}
-		if (!this.updateReq)
-		{
-			return;
-		}
-		if (LocalizationManager.CurrentLanguageCode == "ja")
-		{
-			if (this.label.useFloatSpacing)
-			{
-				this.label.floatSpacingX = this.HoldSpacingX;
-				this.label.floatSpacingY = this.HoldSpacingY;
-			}
-			else
-			{
-				this.label.spacingX = (int)this.HoldSpacingX;
-				this.label.spacingY = (int)this.HoldSpacingY;
-			}
-		}
-		else if (this.label.useFloatSpacing)
-		{
-			UILabel uilabel = this.label;
-			float num = 0f;
-			this.label.floatSpacingY = num;
-			uilabel.floatSpacingX = num;
-		}
-		else
-		{
-			UILabel uilabel2 = this.label;
-			int num2 = 0;
-			this.label.spacingY = num2;
-			uilabel2.spacingX = num2;
-		}
-	}
-
-	private float HoldSpacingX;
-
-	private float HoldSpacingY;
-
-	private bool updateReq;
-
-	private bool callAwake;
-
-	private Localize localize;
-
-	private UILabel label;
-}

+ 24 - 8
Assembly-CSharp/ObjectCreateWindow.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.IO;
+using I2.Loc;
 using UnityEngine;
 using wf;
 
@@ -147,7 +148,12 @@ public class ObjectCreateWindow : BaseMaidPhotoWindow
 		GameObject gameObject2 = Utility.CreatePrefab(gameObject, "ScenePhotoMode/CustomObject/Plane", false);
 		BasePhotoCustomObject component = gameObject2.GetComponent<BasePhotoCustomObject>();
 		this.target_list_.Add(new ObjectCreateWindow.Data(component));
-		this.CreateTabButton(this.objectListGrid.gameObject, component, "新規オブジェクト");
+		UIWFTabButton uiwftabButton = this.CreateTabButton(this.objectListGrid.gameObject, component, "新規オブジェクト");
+		Localize componentInChildren = uiwftabButton.GetComponentInChildren<Localize>();
+		if (componentInChildren != null)
+		{
+			componentInChildren.SetTerm("ScenePhotoMode/マイオブジェ/新規オブジェクト");
+		}
 		Action<string, List<string>> action = delegate(string path, List<string> result_list)
 		{
 			string[] files = Directory.GetFiles(path);
@@ -224,14 +230,24 @@ public class ObjectCreateWindow : BaseMaidPhotoWindow
 			this.typeSelectPopupList.value = ((targetData.customObject.type != BasePhotoCustomObject.Type.Plane) ? "スフィア" : "プレーン");
 			this.typeSelectPopupList.GetComponent<UIButton>().isEnabled = (targetData == this.target_list_[0]);
 		}
+		UILabel componentInChildren = this.saveButton.GetComponentInChildren<UILabel>();
+		Localize component = componentInChildren.GetComponent<Localize>();
 		if (!string.IsNullOrEmpty(targetData.fullPath))
 		{
-			this.saveButton.GetComponentInChildren<UILabel>().text = "更新";
+			componentInChildren.text = "更新";
+			if (component != null)
+			{
+				component.SetTerm("ScenePhotoMode/マイオブジェ/更新");
+			}
 			this.textureExpTextObject.SetActive(false);
 		}
 		else
 		{
-			this.saveButton.GetComponentInChildren<UILabel>().text = "保存";
+			componentInChildren.text = "保存";
+			if (component != null)
+			{
+				component.SetTerm("ScenePhotoMode/マイオブジェ/保存");
+			}
 			if (targetData.customObject.mainTexture != null)
 			{
 				this.textureExpTextObject.SetActive(false);
@@ -248,15 +264,15 @@ public class ObjectCreateWindow : BaseMaidPhotoWindow
 			data.customObject.visible = (data == targetData && this.CheckPrevVisible.check);
 		}
 		BasePhotoCustomObject customObject = targetData.customObject;
-		UI2DSprite componentInChildren = this.selectTextureButton.GetComponentInChildren<UI2DSprite>(true);
+		UI2DSprite componentInChildren2 = this.selectTextureButton.GetComponentInChildren<UI2DSprite>(true);
 		if (customObject.mainTexture != null)
 		{
 			Sprite sprite2D = Sprite.Create(customObject.mainTexture, new Rect(0f, 0f, (float)customObject.mainTexture.width, (float)customObject.mainTexture.height), default(Vector2));
-			componentInChildren.sprite2D = sprite2D;
+			componentInChildren2.sprite2D = sprite2D;
 		}
 		else
 		{
-			componentInChildren.sprite2D = null;
+			componentInChildren2.sprite2D = null;
 		}
 		this.editScaleSlider.value = customObject.scale;
 		this.texColorPalette.ColorPalette.SetColor(customObject.textureColor);
@@ -312,7 +328,7 @@ public class ObjectCreateWindow : BaseMaidPhotoWindow
 		}
 		if (this.selectData.customObject.mainTexture == null)
 		{
-			GameMain.Instance.SysDlg.Show("テクスチャが未設定です", SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/マイオブジェ/ダイアログ/テクスチャが未設定です", null, SystemDialog.TYPE.OK, null, null);
 			return;
 		}
 		if (string.IsNullOrEmpty(this.selectData.fullPath))
@@ -349,7 +365,7 @@ public class ObjectCreateWindow : BaseMaidPhotoWindow
 			}
 			catch
 			{
-				GameMain.Instance.SysDlg.Show("オブジェクトの保存に失敗しました", SystemDialog.TYPE.OK, null, null);
+				GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/マイオブジェ/ダイアログ/オブジェクトの保存に失敗しました", null, SystemDialog.TYPE.OK, null, null);
 			}
 		}
 	}

+ 31 - 4
Assembly-CSharp/ObjectManagerWindow.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using wf;
 
@@ -47,6 +48,27 @@ public class ObjectManagerWindow : BaseMaidPhotoWindow
 		this.AttachPointWindow.onStateTextChangeEvent = delegate(string text)
 		{
 			this.AttachPointStateLabel.text = text;
+			if (GameUty.supportMultiLanguage)
+			{
+				string termPrefix = string.Empty;
+				string term;
+				if (text.LastIndexOf(" : ") != -1)
+				{
+					int num = text.LastIndexOf(" : ") + 3;
+					termPrefix = text.Substring(0, num);
+					term = "ScenePhotoMode/アタッチポイント/" + text.Substring(num);
+				}
+				else
+				{
+					term = "ScenePhotoMode/アタッチポイント/" + text;
+				}
+				Localize component = this.AttachPointStateLabel.GetComponent<Localize>();
+				if (component != null)
+				{
+					component.TermPrefix = termPrefix;
+					component.SetTerm(term);
+				}
+			}
 		};
 		this.AttachPointWindow.gameObject.SetActive(true);
 		WFCheckBox checkAttacWindowVisible = this.CheckAttacWindowVisible;
@@ -72,7 +94,7 @@ public class ObjectManagerWindow : BaseMaidPhotoWindow
 			}
 		});
 		this.PartsTransForm.onChangeAxisVisibleType.Add(new Action(this.OnChangeAxisVisibleType));
-		this.target_list_.Add(new PhotoTransTargetObject(null, "選択なし", PhotoTransTargetObject.Type.Maid, Vector2.zero));
+		this.target_list_.Add(new PhotoTransTargetObject(null, "選択なし", "ScenePhotoMode/選択なし", PhotoTransTargetObject.Type.Maid, Vector2.zero));
 		this.CreateTabButton(this.Grid.gameObject, this.target_list_[0]);
 		this.TabPanel.UpdateChildren();
 		this.TabPanel.Select(this.Grid.GetChild(0).gameObject.GetComponent<UIWFTabButton>());
@@ -117,7 +139,7 @@ public class ObjectManagerWindow : BaseMaidPhotoWindow
 			flag = flag;
 			this.CheckAttacWindowVisible.check = flag;
 			checkAttacWindowVisible.enabled = flag;
-			this.AttachPointStateLabel.text = "設定不可";
+			this.AttachPointWindow.onStateTextChangeEvent("設定不可");
 		}
 		else
 		{
@@ -219,13 +241,13 @@ public class ObjectManagerWindow : BaseMaidPhotoWindow
 		}
 	}
 
-	public PhotoTransTargetObject AddTransTargetObject(GameObject target_obj, string draw_name, PhotoTransTargetObject.Type type)
+	public PhotoTransTargetObject AddTransTargetObject(GameObject target_obj, string draw_name, string nameTerm, PhotoTransTargetObject.Type type)
 	{
 		if (target_obj == null)
 		{
 			return null;
 		}
-		PhotoTransTargetObject photoTransTargetObject = new PhotoTransTargetObject(target_obj, draw_name, type, new Vector2(this.PartsTransForm.ScaleInput.SliderMin, this.PartsTransForm.ScaleInput.SliderMax));
+		PhotoTransTargetObject photoTransTargetObject = new PhotoTransTargetObject(target_obj, draw_name, nameTerm, type, new Vector2(this.PartsTransForm.ScaleInput.SliderMin, this.PartsTransForm.ScaleInput.SliderMax));
 		if (GameMain.Instance.VRMode && type != PhotoTransTargetObject.Type.BG)
 		{
 			MeshRenderer componentInChildren = photoTransTargetObject.axis_obj.GetComponentInChildren<MeshRenderer>();
@@ -408,6 +430,11 @@ public class ObjectManagerWindow : BaseMaidPhotoWindow
 		GameObject gameObject = Utility.CreatePrefab(parent_obj, "ScenePhotoMode/WindowListItem", true);
 		gameObject.name = target.guid.ToString();
 		gameObject.GetComponentInChildren<UILabel>().text = target.draw_name;
+		Localize componentInChildren = gameObject.GetComponentInChildren<Localize>();
+		if (componentInChildren != null && GameUty.supportMultiLanguage)
+		{
+			componentInChildren.SetTerm(target.nameTerm);
+		}
 		UIWFTabButton component = gameObject.GetComponent<UIWFTabButton>();
 		EventDelegate.Add(component.onSelect, delegate()
 		{

+ 50 - 9
Assembly-CSharp/OnHoverTaskIcon.cs

@@ -1,4 +1,5 @@
 using System;
+using I2.Loc;
 using Schedule;
 using UnityEngine;
 
@@ -16,7 +17,7 @@ public class OnHoverTaskIcon : MonoBehaviour
 		this.spritePlate = this.m_goNamePlate.GetComponent<UISprite>();
 		this.labelName = UTY.GetChildObject(this.m_goNamePlate, "Name", false).GetComponent<UILabel>();
 		this.labelName.width = 0;
-		this.SetText(taskName);
+		this.SetText(taskName, -1);
 		this.m_goNamePlate.SetActive(false);
 		this.WariningFacilty = UTY.GetChildObject(base.gameObject, "WarningFacilty", false).GetComponent<UISprite>();
 		this.WariningFacilty.gameObject.SetActive(false);
@@ -49,21 +50,57 @@ public class OnHoverTaskIcon : MonoBehaviour
 		}
 	}
 
-	public void SetText(string message)
+	public void SetText(string message, int needNum = -1)
 	{
 		UISprite component = this.m_goNamePlate.GetComponent<UISprite>();
-		this.labelName.text = message;
-		this.labelName.MakePixelPerfect();
+		if (GameUty.supportMultiLanguage)
+		{
+			string text = message;
+			if (message.IndexOf('\n') != -1)
+			{
+				text = message.Split(new char[]
+				{
+					'\n'
+				})[0];
+			}
+			string text2 = string.Empty;
+			text2 = LocalizationManager.GetTranslation("SceneDaily/スケジュール/項目/" + text, true, 0, true, false, null, null);
+			if (string.IsNullOrEmpty(text2))
+			{
+				text2 = LocalizationManager.GetTranslation("SceneFacilityManagement/施設名/" + text, true, 0, true, false, null, null);
+			}
+			if (string.IsNullOrEmpty(text2))
+			{
+				text2 = text;
+			}
+			string text3 = string.Empty;
+			if (needNum != -1)
+			{
+				text3 = LocalizationManager.GetTranslation("SceneDaily/あと{0}人必要です", true, 0, true, false, null, null);
+			}
+			string text4 = text2;
+			if (!string.IsNullOrEmpty(text3))
+			{
+				text4 = text4 + "\n" + string.Format(text3, needNum);
+			}
+			this.labelName.text = text4;
+			this.labelName.MakePixelPerfect();
+		}
+		else
+		{
+			this.labelName.text = message;
+			this.labelName.MakePixelPerfect();
+		}
 		string[] array = message.Split(new char[]
 		{
 			'\n'
 		});
 		int num = 0;
-		foreach (string text in array)
+		foreach (string text5 in array)
 		{
-			if (num < text.Length)
+			if (num < text5.Length)
 			{
-				num = text.Length;
+				num = text5.Length;
 			}
 		}
 		component.width = this.labelName.width + 15;
@@ -76,6 +113,10 @@ public class OnHoverTaskIcon : MonoBehaviour
 		{
 			if (this.m_goNamePlate != null)
 			{
+				if (GameUty.supportMultiLanguage)
+				{
+					this.SetText(this.taskName, -1);
+				}
 				this.m_goNamePlate.SetActive(true);
 			}
 			if (this.workData != null && this.workData.id != ScheduleCSVData.faclilityPowerUpWorkId)
@@ -115,11 +156,11 @@ public class OnHoverTaskIcon : MonoBehaviour
 				"\nあと[FF0000]",
 				num,
 				"人[-]必要です"
-			}));
+			}), num);
 		}
 		else
 		{
-			this.SetText(this.taskName);
+			this.SetText(this.taskName, -1);
 		}
 	}
 

+ 14 - 11
Assembly-CSharp/OnaholeNodeMenuChildSecondRow.cs

@@ -218,18 +218,21 @@ public class OnaholeNodeMenuChildSecondRow : OnaholeBaseNodeMenuManager
 	protected override void OnCancelMenu()
 	{
 		base.OnCancelMenu();
-		string uniqueName = base.selectedNodeButton.button.uniqueName;
-		if (this.mode == OnaholeNodeMenuChildSecondRow.Mode.AutoMode)
-		{
-			this.nodeMenuManager.autoPistonEnabled = bool.Parse(uniqueName);
-		}
-		else if (this.mode == OnaholeNodeMenuChildSecondRow.Mode.AutoFinish)
-		{
-			this.nodeMenuManager.autoFinishEnabled = bool.Parse(uniqueName);
-		}
-		else if (this.mode == OnaholeNodeMenuChildSecondRow.Mode.AutoReaction)
+		if (base.selectedNodeButton != null)
 		{
-			this.nodeMenuManager.autoReaction = bool.Parse(uniqueName);
+			string uniqueName = base.selectedNodeButton.button.uniqueName;
+			if (this.mode == OnaholeNodeMenuChildSecondRow.Mode.AutoMode)
+			{
+				this.nodeMenuManager.autoPistonEnabled = bool.Parse(uniqueName);
+			}
+			else if (this.mode == OnaholeNodeMenuChildSecondRow.Mode.AutoFinish)
+			{
+				this.nodeMenuManager.autoFinishEnabled = bool.Parse(uniqueName);
+			}
+			else if (this.mode == OnaholeNodeMenuChildSecondRow.Mode.AutoReaction)
+			{
+				this.nodeMenuManager.autoReaction = bool.Parse(uniqueName);
+			}
 		}
 		this.isInputEnabled = false;
 		this.ClearButtonObject();

+ 8 - 0
Assembly-CSharp/OnaholeNodeMenuChildThirdRow.cs

@@ -11,6 +11,7 @@ public class OnaholeNodeMenuChildThirdRow : OnaholeBaseNodeMenuManager
 	public void Clear()
 	{
 		this.isInputEnabled = false;
+		this.changeInput = -1;
 		this.ClearButtonObject();
 	}
 
@@ -73,8 +74,15 @@ public class OnaholeNodeMenuChildThirdRow : OnaholeBaseNodeMenuManager
 		{
 			this.OnCancelMenu();
 		}
+		if (this.changeInput != -1)
+		{
+			this.isInputEnabled = (this.changeInput == 1);
+		}
+		this.changeInput = -1;
 	}
 
 	[SerializeField]
 	private OnaholeNodeMenuChildSecondRow secondRow;
+
+	private int changeInput;
 }

+ 2 - 0
Assembly-CSharp/OnaholeReactionManager.cs

@@ -250,10 +250,12 @@ public class OnaholeReactionManager : MonoBehaviour
 		if (string.IsNullOrEmpty(text))
 		{
 			this.maid.ResetProp(MPN.eye_hi, true);
+			this.maid.ResetProp(MPN.eye_hi_r, true);
 		}
 		else
 		{
 			this.maid.SetProp(MPN.eye_hi, text, 0, true, false);
+			this.maid.SetProp(MPN.eye_hi_r, text, 0, true, false);
 		}
 		this.maid.AllProcProp();
 	}

+ 191 - 61
Assembly-CSharp/OvrIK.cs

@@ -358,6 +358,13 @@ public class OvrIK : MonoBehaviour
 			this.m_maid.EyeToCamera(Maid.EyeMoveType.目と顔を向ける, 0f);
 			this.m_maid = null;
 		}
+		for (int j = 0; j < this.m_listTrackerMeshRnder.Count; j++)
+		{
+			if (this.m_listTrackerMeshRnder[j] != null)
+			{
+				this.m_listTrackerMeshRnder[j].enabled = true;
+			}
+		}
 		this.m_listTrackerMeshRnder.Clear();
 		this.m_listDefaultPose.Clear();
 		if (this.m_goDefaultPoseParent != null)
@@ -392,6 +399,22 @@ public class OvrIK : MonoBehaviour
 		{
 			UnityEngine.Object.Destroy(this.m_trTargetOffsFootR.gameObject);
 		}
+		if (this.m_trTargetOffsBendGoalKneeL != null)
+		{
+			UnityEngine.Object.Destroy(this.m_trTargetOffsBendGoalKneeL.gameObject);
+		}
+		if (this.m_trTargetOffsBendGoalKneeR != null)
+		{
+			UnityEngine.Object.Destroy(this.m_trTargetOffsBendGoalKneeR.gameObject);
+		}
+		if (this.m_trTargetOffsBendGoalElbowL != null)
+		{
+			UnityEngine.Object.Destroy(this.m_trTargetOffsBendGoalElbowL.gameObject);
+		}
+		if (this.m_trTargetOffsBendGoalElbowR != null)
+		{
+			UnityEngine.Object.Destroy(this.m_trTargetOffsBendGoalElbowR.gameObject);
+		}
 		if (this.m_trTargetOffsHeadTracker != null)
 		{
 			UnityEngine.Object.Destroy(this.m_trTargetOffsHeadTracker.gameObject);
@@ -767,52 +790,148 @@ public class OvrIK : MonoBehaviour
 		{
 			trackingObjectsMgr.Refresh();
 			List<Transform> trackingObjects = trackingObjectsMgr.TrackingObjects;
+			for (int i = 0; i < trackingObjects.Count; i++)
+			{
+				MeshRenderer[] componentsInChildren = trackingObjects[i].GetComponentsInChildren<MeshRenderer>();
+				for (int j = 0; j < componentsInChildren.Length; j++)
+				{
+					this.m_listTrackerMeshRnder.Add(componentsInChildren[j]);
+				}
+			}
 			bool use1TrackerForHead = ControllerShortcutSettingData.config.use1TrackerForHead;
-			int index = 0;
-			int index2 = 1;
-			int index3 = 2;
-			int num = 2;
-			int num2 = 3;
 			if (use1TrackerForHead && 1 <= trackingObjects.Count)
 			{
 				Debug.Log("OvrIK トラッカーが1つ見つかりました。ヘッドトラッキングに使えます。");
 				trackingObjects.Sort((Transform a, Transform b) => (b.transform.position.y - a.transform.position.y >= 0f) ? 1 : -1);
-				Transform transform9 = trackingObjects[0];
-				this.m_listTrackerMeshRnder.Add(transform9.GetComponent<MeshRenderer>());
-				Transform transform10 = CMT.SearchObjName(this.m_maid.body0.m_Bones.transform, "Bip01 Head", true);
+				Transform parent = trackingObjects[0];
+				Transform transform9 = CMT.SearchObjName(this.m_maid.body0.m_Bones.transform, "Bip01 Head", true);
 				this.m_trTargetOffsHeadTracker = new GameObject("VRIK Target Offs Head Tracker").transform;
-				this.m_trTargetOffsHeadTracker.position = transform10.position;
-				this.m_trTargetOffsHeadTracker.rotation = transform10.rotation;
-				this.m_trTargetOffsHeadTracker.SetParent(transform9, true);
+				this.m_trTargetOffsHeadTracker.position = transform9.position;
+				this.m_trTargetOffsHeadTracker.rotation = transform9.rotation;
+				this.m_trTargetOffsHeadTracker.SetParent(parent, true);
 				this.m_ik.solver.spine.headTarget = this.m_trTargetOffsHeadTracker;
 				trackingObjects.Remove(transform);
 				this.CheckHeadIsTracker();
 			}
-			if (num <= trackingObjects.Count)
+			Transform transform10 = null;
+			Transform transform11 = null;
+			Transform transform12 = null;
+			Transform transform13 = null;
+			Transform transform14 = null;
+			Transform transform15 = null;
+			Transform transform16 = null;
+			Func<Transform, Transform, Vector3> func = (Transform trA, Transform trB) => trA.position - trB.position;
+			Func<Transform, Transform, Transform, bool> func2 = (Transform trBase, Transform trA, Transform trB) => (trBase.position - trA.position).sqrMagnitude < (trBase.position - trB.position).sqrMagnitude;
+			trackingObjects.Sort((Transform a, Transform b) => (a.transform.position.y - b.transform.position.y <= 0f) ? 1 : -1);
+			if (2 <= trackingObjects.Count)
 			{
-				trackingObjects.Sort((Transform a, Transform b) => (a.transform.position.y - b.transform.position.y >= 0f) ? 1 : -1);
-				if (hand_trans3.position.y < trackingObjects[index].position.y || hand_trans3.position.y < trackingObjects[index2].position.y)
+				Transform transform17 = trackingObjects[0];
+				Transform transform18 = trackingObjects[1];
+				if (Mathf.Abs(func(transform17, hand_trans3).y) <= 0.5f && Mathf.Abs(func(transform18, hand_trans3).y) <= 0.5f)
 				{
-					Debug.LogError("足のトラッカーは手より下になければなりません。");
+					if (func2(hand_trans3, transform17, transform18))
+					{
+						transform14 = transform17;
+						transform15 = transform18;
+					}
+					else
+					{
+						transform14 = transform18;
+						transform15 = transform17;
+					}
+					trackingObjects.Remove(transform17);
+					trackingObjects.Remove(transform18);
+					Debug.Log("肘");
 				}
-				if ((trackingObjects[index].position - trackingObjects[index2].position).magnitude < 0.1f)
+			}
+			trackingObjects.Sort((Transform a, Transform b) => (a.transform.position.y - b.transform.position.y >= 0f) ? 1 : -1);
+			if (2 <= trackingObjects.Count)
+			{
+				Transform transform19 = trackingObjects[0];
+				Transform transform20 = trackingObjects[1];
+				if (Mathf.Abs(func(transform19, transform20).y) <= 0.1f && func(hand_trans3, transform19).y > 0f)
 				{
-					Debug.LogError("足は10cm以上広げて下さい。");
+					if (func2(hand_trans3, transform19, transform20))
+					{
+						transform10 = transform19;
+						transform11 = transform20;
+					}
+					else
+					{
+						transform10 = transform20;
+						transform11 = transform19;
+					}
+					trackingObjects.Remove(transform19);
+					trackingObjects.Remove(transform20);
+					Debug.Log("足");
 				}
-				Transform transform11;
-				Transform transform12;
-				if ((hand_trans3.position - trackingObjects[index].position).sqrMagnitude < (hand_trans3.position - trackingObjects[index2].position).sqrMagnitude)
+			}
+			if (2 <= trackingObjects.Count)
+			{
+				Transform transform21 = trackingObjects[0];
+				Transform transform22 = trackingObjects[1];
+				if (Mathf.Abs(func(transform21, transform22).y) <= 0.1f && func(hand_trans3, transform21).y > 0f)
 				{
-					transform11 = trackingObjects[index];
-					transform12 = trackingObjects[index2];
+					if (func2(hand_trans3, transform21, transform22))
+					{
+						transform12 = transform21;
+						transform13 = transform22;
+					}
+					else
+					{
+						transform12 = transform22;
+						transform13 = transform21;
+					}
+					trackingObjects.Remove(transform21);
+					trackingObjects.Remove(transform22);
+					Debug.Log("膝");
 				}
-				else
+			}
+			if (1 <= trackingObjects.Count)
+			{
+				Transform transform23 = trackingObjects[0];
+				if (func(hand_trans3, transform23).y > 0f)
+				{
+					transform16 = transform23;
+					Debug.Log("腰");
+				}
+			}
+			if (!false)
+			{
+				this.m_trTargetOffsBendGoalKneeL = new GameObject("VRIK BEND GOAL KNEE L").transform;
+				this.m_trTargetOffsBendGoalKneeR = new GameObject("VRIK BEND GOAL KNEE R").transform;
+				this.m_trTargetOffsBendGoalElbowL = new GameObject("VRIK BEND GOAL ELBOW L").transform;
+				this.m_trTargetOffsBendGoalElbowR = new GameObject("VRIK BEND GOAL ELBOW R").transform;
+			}
+			else
+			{
+				this.m_trTargetOffsBendGoalKneeL = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
+				this.m_trTargetOffsBendGoalKneeR = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
+				this.m_trTargetOffsBendGoalElbowL = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
+				this.m_trTargetOffsBendGoalElbowR = GameObject.CreatePrimitive(PrimitiveType.Cube).transform;
+				this.m_trTargetOffsBendGoalKneeL.gameObject.name = "VRIK BEND GOAL KNEE L";
+				this.m_trTargetOffsBendGoalKneeR.gameObject.name = "VRIK BEND GOAL KNEE R";
+				this.m_trTargetOffsBendGoalElbowL.gameObject.name = "VRIK BEND GOAL ELBOW L";
+				this.m_trTargetOffsBendGoalElbowR.gameObject.name = "VRIK BEND GOAL ELBOW R";
+				this.m_trTargetOffsBendGoalKneeL.transform.localScale = Vector3.one * 0.03f;
+				this.m_trTargetOffsBendGoalKneeR.transform.localScale = Vector3.one * 0.03f;
+				this.m_trTargetOffsBendGoalElbowL.transform.localScale = Vector3.one * 0.03f;
+				this.m_trTargetOffsBendGoalElbowR.transform.localScale = Vector3.one * 0.03f;
+			}
+			this.m_trTargetOffsBendGoalKneeL.SetParent(this.m_goIKTargetParent.transform, true);
+			this.m_trTargetOffsBendGoalKneeR.SetParent(this.m_goIKTargetParent.transform, true);
+			this.m_trTargetOffsBendGoalElbowL.SetParent(this.m_goIKTargetParent.transform, true);
+			this.m_trTargetOffsBendGoalElbowR.SetParent(this.m_goIKTargetParent.transform, true);
+			Action<Transform, Transform> action = delegate(Transform trA, Transform trB)
+			{
+				if (trA != null && trB != null)
 				{
-					transform11 = trackingObjects[index2];
-					transform12 = trackingObjects[index];
+					trB.position = trA.position;
+					trB.rotation = trA.rotation;
 				}
-				this.m_listTrackerMeshRnder.Add(transform11.GetComponent<MeshRenderer>());
-				this.m_listTrackerMeshRnder.Add(transform12.GetComponent<MeshRenderer>());
+			};
+			if (transform10 != null && transform11 != null)
+			{
 				this.m_ik.solver.spine.pelvisPositionOffset = this.m_vPelvisPosOffs;
 				this.m_ik.solver.spine.pelvisRotationOffset = Quaternion.Euler(this.m_vPelvisRotOffs);
 				this.m_ik.solver.spine.pelvisPositionWeight = 0f;
@@ -822,7 +941,7 @@ public class OvrIK : MonoBehaviour
 				transform = CMT.SearchObjName(this.m_maid.body0.m_Bones.transform, "Bip01 L Foot", true);
 				this.m_trTargetOffsFootL.position = transform.position;
 				this.m_trTargetOffsFootL.rotation = transform.rotation;
-				this.m_trTargetOffsFootL.SetParent(transform11, true);
+				this.m_trTargetOffsFootL.SetParent(transform10, true);
 				this.m_vFootDefOffsLocalL = this.m_trTargetOffsFootL.localPosition;
 				this.m_trTargetOffsFootLVecY = new GameObject("Y Vec").transform;
 				this.m_trTargetOffsFootLVecY.SetParent(this.m_trTargetOffsFootL, false);
@@ -831,7 +950,7 @@ public class OvrIK : MonoBehaviour
 				transform = CMT.SearchObjName(this.m_maid.body0.m_Bones.transform, "Bip01 R Foot", true);
 				this.m_trTargetOffsFootR.position = transform.position;
 				this.m_trTargetOffsFootR.rotation = transform.rotation;
-				this.m_trTargetOffsFootR.SetParent(transform12, true);
+				this.m_trTargetOffsFootR.SetParent(transform11, true);
 				this.m_vFootDefOffsLocalR = this.m_trTargetOffsFootR.localPosition;
 				this.m_trTargetOffsFootRVecY = new GameObject("Y Vec").transform;
 				this.m_trTargetOffsFootRVecY.SetParent(this.m_trTargetOffsFootR, false);
@@ -839,39 +958,42 @@ public class OvrIK : MonoBehaviour
 				this.m_trTargetOffsFootRVecY.position += new Vector3(0f, -1f, 0f);
 				this.m_ik.solver.leftLeg.target = this.m_trTargetOffsFootL;
 				this.m_ik.solver.rightLeg.target = this.m_trTargetOffsFootR;
-				this.m_trPlayerDefaultPoseFoot = new GameObject("Pair Player Foot").transform;
-				this.m_trPlayerDefaultPoseFoot.SetParent(this.m_trPlayerDefaultPoseEye, false);
-				this.m_trPlayerDefaultPoseFoot.position = this.m_trTargetOffsFootL.position + (this.m_trTargetOffsFootR.position - this.m_trTargetOffsFootL.position) * 0.5f;
-				this.m_ik.solver.spine.pelvisTarget = null;
-				if (num2 <= trackingObjects.Count)
-				{
-					Transform transform13 = trackingObjects[index3];
-					this.m_listTrackerMeshRnder.Add(transform13.GetComponent<MeshRenderer>());
-					if (transform13.position.y >= hand_trans3.position.y)
-					{
-						Debug.LogError("腰は頭より下でなければなりません。");
-					}
-					if (transform13.position.y <= transform11.position.y || transform13.position.y <= transform12.position.y)
-					{
-						Debug.LogError("腰は両足より上でなければなりません。");
-					}
-					transform = CMT.SearchObjName(this.m_maid.body0.m_Bones.transform, "Bip01", true);
-					this.m_trTargetOffsPelvis.position = transform.position;
-					this.m_trTargetOffsPelvis.rotation = transform.rotation;
-					this.m_trTargetOffsPelvis.SetParent(transform13, true);
-					float num3 = realHeadTransform.transform.position.y - (transform13.position.y - 0.2f);
-					Transform transform14 = CMT.SearchObjName(this.m_maid.body0.m_Bones.transform, "Bip01 Pelvis", true);
-					float num4 = vector.y - transform14.transform.position.y;
-					float num5 = num4 - num3;
-					this.m_ik.solver.spine.pelvisTarget = this.m_trTargetOffsPelvis;
-					this.m_ik.solver.spine.pelvisPositionWeight = 1f;
-				}
 				this.m_bLegTracking = true;
 			}
-			else
+			if (transform12 != null && transform13 != null)
 			{
-				Debug.Log("OvrIK トラッカーは" + num + "つ未満です。足のトラッキングは行いません。");
-				this.m_bLegTracking = false;
+				action(CMT.SearchObjName(this.m_maid.body0.m_Bones.transform, "Bip01 L Calf", true), this.m_trTargetOffsBendGoalKneeL);
+				action(CMT.SearchObjName(this.m_maid.body0.m_Bones.transform, "Bip01 R Calf", true), this.m_trTargetOffsBendGoalKneeR);
+				this.m_trTargetOffsBendGoalKneeL.position += realHeadTransform.forward * 0.4f;
+				this.m_trTargetOffsBendGoalKneeR.position += realHeadTransform.forward * 0.4f;
+				this.m_trTargetOffsBendGoalKneeL.SetParent(transform12, true);
+				this.m_trTargetOffsBendGoalKneeR.SetParent(transform13, true);
+				this.m_ik.solver.leftLeg.bendGoal = this.m_trTargetOffsBendGoalKneeL;
+				this.m_ik.solver.rightLeg.bendGoal = this.m_trTargetOffsBendGoalKneeR;
+				this.m_ik.solver.leftLeg.bendGoalWeight = (this.m_ik.solver.rightLeg.bendGoalWeight = 1f);
+			}
+			if (transform14 != null && transform15 != null)
+			{
+				action(CMT.SearchObjName(this.m_maid.body0.m_Bones.transform, "Bip01 L Forearm", true), this.m_trTargetOffsBendGoalElbowL);
+				action(CMT.SearchObjName(this.m_maid.body0.m_Bones.transform, "Bip01 R Forearm", true), this.m_trTargetOffsBendGoalElbowR);
+				this.m_trTargetOffsBendGoalElbowL.SetParent(transform14, true);
+				this.m_trTargetOffsBendGoalElbowR.SetParent(transform15, true);
+				this.m_ik.solver.leftArm.bendGoal = this.m_trTargetOffsBendGoalElbowL;
+				this.m_ik.solver.rightArm.bendGoal = this.m_trTargetOffsBendGoalElbowR;
+				this.m_ik.solver.leftArm.bendGoalWeight = (this.m_ik.solver.rightArm.bendGoalWeight = 1f);
+			}
+			if (transform16 != null)
+			{
+				transform = CMT.SearchObjName(this.m_maid.body0.m_Bones.transform, "Bip01", true);
+				this.m_trTargetOffsPelvis.position = transform.position;
+				this.m_trTargetOffsPelvis.rotation = transform.rotation;
+				this.m_trTargetOffsPelvis.SetParent(transform16, true);
+				float num = realHeadTransform.transform.position.y - (transform16.position.y - 0.2f);
+				Transform transform24 = CMT.SearchObjName(this.m_maid.body0.m_Bones.transform, "Bip01 Pelvis", true);
+				float num2 = vector.y - transform24.transform.position.y;
+				float num3 = num2 - num;
+				this.m_ik.solver.spine.pelvisTarget = this.m_trTargetOffsPelvis;
+				this.m_ik.solver.spine.pelvisPositionWeight = 1f;
 			}
 		}
 		if (!this.m_bLegTracking)
@@ -1325,6 +1447,14 @@ public class OvrIK : MonoBehaviour
 
 	private Transform m_trTargetOffsFootR;
 
+	private Transform m_trTargetOffsBendGoalKneeL;
+
+	private Transform m_trTargetOffsBendGoalKneeR;
+
+	private Transform m_trTargetOffsBendGoalElbowL;
+
+	private Transform m_trTargetOffsBendGoalElbowR;
+
 	private Transform m_trTargetOffsHeadTracker;
 
 	private Transform m_trTargetOffsFootLVecY;
@@ -1438,7 +1568,7 @@ public class OvrIK : MonoBehaviour
 	{
 		public void OnBeforeSerialize()
 		{
-			this.m_nVersion = 1210;
+			this.m_nVersion = 1230;
 		}
 
 		public void OnAfterDeserialize()
@@ -1498,7 +1628,7 @@ public class OvrIK : MonoBehaviour
 		private const string CONF_NAME = "OvrIK.json";
 
 		[SerializeField]
-		private int m_nVersion = 1210;
+		private int m_nVersion = 1230;
 
 		[SerializeField]
 		private float solver_locomotion_weight = 1f;

+ 4 - 4
Assembly-CSharp/PhotTransInput.cs

@@ -26,17 +26,17 @@ public class PhotTransInput : MonoBehaviour
 		this.btn_list_.Add(UTY.GetChildObject(base.gameObject, "Btns/ResetBtn", false).GetComponent<UIButton>());
 		EventDelegate.Add(this.btn_list_[this.btn_list_.Count - 1].onClick, new EventDelegate.Callback(this.OnReset));
 		EventDelegate eventDelegate = new EventDelegate(this, "OnMouseHoverIn");
-		eventDelegate.parameters[0].value = "リセット";
+		eventDelegate.parameters[0].value = "ScenePhotoMode/リセット";
 		this.btn_list_[this.btn_list_.Count - 1].gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate);
 		this.btn_list_.Add(UTY.GetChildObject(base.gameObject, "Btns/CopyBtn", false).GetComponent<UIButton>());
 		EventDelegate.Add(this.btn_list_[this.btn_list_.Count - 1].onClick, new EventDelegate.Callback(this.OnCopy));
 		eventDelegate = new EventDelegate(this, "OnMouseHoverIn");
-		eventDelegate.parameters[0].value = "コピー";
+		eventDelegate.parameters[0].value = "ScenePhotoMode/コピー";
 		this.btn_list_[this.btn_list_.Count - 1].gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate);
 		this.btn_list_.Add(UTY.GetChildObject(base.gameObject, "Btns/PasteBtn", false).GetComponent<UIButton>());
 		EventDelegate.Add(this.btn_list_[this.btn_list_.Count - 1].onClick, new EventDelegate.Callback(this.OnPaste));
 		eventDelegate = new EventDelegate(this, "OnMouseHoverIn");
-		eventDelegate.parameters[0].value = "ペースト";
+		eventDelegate.parameters[0].value = "ScenePhotoMode/ペースト";
 		this.btn_list_[this.btn_list_.Count - 1].gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate);
 		for (int i = 0; i < this.btn_list_.Count; i++)
 		{
@@ -295,7 +295,7 @@ public class PhotTransInput : MonoBehaviour
 	public void OnMouseHoverIn(string text)
 	{
 		MouseExposition @object = MouseExposition.GetObject();
-		@object.text = text;
+		@object.textFromLanguageTerm = text;
 	}
 
 	public void OnMouseHoverOut()

+ 12 - 0
Assembly-CSharp/PhotoBGData.cs

@@ -63,6 +63,7 @@ public class PhotoBGData
 		}
 		PhotoBGData.category_list_ = new Dictionary<string, List<PhotoBGData>>();
 		PhotoBGData.popup_menu_list_ = new List<KeyValuePair<string, UnityEngine.Object>>();
+		PhotoBGData.popup_category_term_list = new List<string>();
 		HashSet<string> hashSet2 = new HashSet<string>();
 		List<PhotoBGData> data = PhotoBGData.data;
 		for (int j = 0; j < data.Count; j++)
@@ -75,11 +76,20 @@ public class PhotoBGData
 			if (!hashSet2.Contains(data[j].category))
 			{
 				PhotoBGData.popup_menu_list_.Add(new KeyValuePair<string, UnityEngine.Object>(data[j].category, null));
+				PhotoBGData.popup_category_term_list.Add("ScenePhotoMode/BG/カテゴリー/" + data[j].category);
 				hashSet2.Add(data[j].category);
 			}
 		}
 	}
 
+	public string nameTerm
+	{
+		get
+		{
+			return (!(this.category == "マイルーム")) ? ("ScenePhotoMode/BG/" + this.id.ToString() + "/名前") : string.Empty;
+		}
+	}
+
 	public void Apply()
 	{
 		if (!string.IsNullOrEmpty(this.create_prefab_name))
@@ -116,6 +126,8 @@ public class PhotoBGData
 		}
 	}
 
+	public static List<string> popup_category_term_list { get; private set; }
+
 	public static List<KeyValuePair<string, UnityEngine.Object>> popup_category_list
 	{
 		get

+ 13 - 0
Assembly-CSharp/PhotoBGObjectData.cs

@@ -64,6 +64,7 @@ public class PhotoBGObjectData
 		}
 		PhotoBGObjectData.category_list_ = new Dictionary<string, List<PhotoBGObjectData>>();
 		PhotoBGObjectData.popup_menu_list_ = new List<KeyValuePair<string, UnityEngine.Object>>();
+		PhotoBGObjectData.popup_category_term_list = new List<string>();
 		HashSet<string> hashSet2 = new HashSet<string>();
 		for (int j = 0; j < PhotoBGObjectData.bg_data_.Count; j++)
 		{
@@ -75,12 +76,14 @@ public class PhotoBGObjectData
 			if (!hashSet2.Contains(PhotoBGObjectData.bg_data_[j].category))
 			{
 				PhotoBGObjectData.popup_menu_list_.Add(new KeyValuePair<string, UnityEngine.Object>(PhotoBGObjectData.bg_data_[j].category, null));
+				PhotoBGObjectData.popup_category_term_list.Add("ScenePhotoMode/背景オブジェクト/カテゴリー/" + PhotoBGObjectData.bg_data_[j].category);
 				hashSet2.Add(PhotoBGObjectData.bg_data_[j].category);
 			}
 		}
 		if (!hashSet2.Contains("マイオブジェクト"))
 		{
 			PhotoBGObjectData.popup_menu_list_.Add(new KeyValuePair<string, UnityEngine.Object>("マイオブジェクト", null));
+			PhotoBGObjectData.popup_category_term_list.Add("ScenePhotoMode/背景オブジェクト/カテゴリー/マイオブジェクト");
 			PhotoBGObjectData.category_list_.Add("マイオブジェクト", new List<PhotoBGObjectData>());
 		}
 	}
@@ -112,6 +115,14 @@ public class PhotoBGObjectData
 		return photoBGObjectData;
 	}
 
+	public string termName
+	{
+		get
+		{
+			return (!(this.category == "マイオブジェクト")) ? ("ScenePhotoMode/背景オブジェクト/" + this.id.ToString() + "/名前") : string.Empty;
+		}
+	}
+
 	public static List<PhotoBGObjectData> data
 	{
 		get
@@ -128,6 +139,8 @@ public class PhotoBGObjectData
 		}
 	}
 
+	public static List<string> popup_category_term_list { get; private set; }
+
 	public static List<KeyValuePair<string, UnityEngine.Object>> popup_category_list
 	{
 		get

+ 4 - 0
Assembly-CSharp/PhotoFaceData.cs

@@ -42,6 +42,7 @@ public class PhotoFaceData
 		}
 		PhotoFaceData.category_list_ = new Dictionary<string, List<PhotoFaceData>>();
 		PhotoFaceData.popup_menu_list_ = new List<KeyValuePair<string, UnityEngine.Object>>();
+		PhotoFaceData.popup_category_term_list = new List<string>();
 		HashSet<string> hashSet = new HashSet<string>();
 		List<PhotoFaceData> data = PhotoFaceData.data;
 		for (int j = 0; j < data.Count; j++)
@@ -54,6 +55,7 @@ public class PhotoFaceData
 			if (!hashSet.Contains(data[j].category))
 			{
 				PhotoFaceData.popup_menu_list_.Add(new KeyValuePair<string, UnityEngine.Object>(data[j].category, null));
+				PhotoFaceData.popup_category_term_list.Add("ScenePhotoMode/表情/カテゴリー/" + data[j].category);
 				hashSet.Add(data[j].category);
 			}
 		}
@@ -109,6 +111,8 @@ public class PhotoFaceData
 		}
 	}
 
+	public static List<string> popup_category_term_list { get; private set; }
+
 	public static List<KeyValuePair<string, UnityEngine.Object>> popup_category_list
 	{
 		get

+ 1 - 1
Assembly-CSharp/PhotoModeMain.cs

@@ -58,7 +58,7 @@ public class PhotoModeMain : WfScreenChildren
 	{
 		if (GameMain.Instance.SysDlg.IsDecided)
 		{
-			GameMain.Instance.SysDlg.Show("セーブしていないデータは失われます。\n終了しますか?", SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.OnEndOk), null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/セーブしていないデータは失われます。終了しますか?", null, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.OnEndOk), null);
 		}
 	}
 

+ 6 - 6
Assembly-CSharp/PhotoModeObjectSave.cs

@@ -41,23 +41,23 @@ public class PhotoModeObjectSave : MonoBehaviour
 		string text = this.InputPoseName.value;
 		if (string.IsNullOrEmpty(text))
 		{
-			GameMain.Instance.SysDlg.Show("オブジェクト名が記入されていません", SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/マイオブジェ/ダイアログ/オブジェクト名が記入されていません", null, SystemDialog.TYPE.OK, null, null);
 			return;
 		}
 		if (0 <= text.IndexOfAny(invalidFileNameChars))
 		{
-			GameMain.Instance.SysDlg.Show("オブジェクト名に使用できない文字が使われています", SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/マイオブジェ/ダイアログ/オブジェクト名に使用できない文字が使われています", null, SystemDialog.TYPE.OK, null, null);
 			return;
 		}
 		text = ObjectCreateWindow.folder_path + "\\" + text + ".poj";
 		if (250 < text.Length)
 		{
-			GameMain.Instance.SysDlg.Show("オブジェクト名が長すぎます", SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/マイオブジェ/ダイアログ/オブジェクト名が長すぎます", null, SystemDialog.TYPE.OK, null, null);
 			return;
 		}
 		if (File.Exists(text))
 		{
-			GameMain.Instance.SysDlg.Show("データが既に存在しています\n別の名前を指定してください", SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/マイオブジェ/ダイアログ/データが既に存在しています別の名前を指定してください", null, SystemDialog.TYPE.OK, null, null);
 			return;
 		}
 		this.Save(text);
@@ -71,14 +71,14 @@ public class PhotoModeObjectSave : MonoBehaviour
 		}
 		catch
 		{
-			GameMain.Instance.SysDlg.Show("オブジェクトの保存に失敗しました", SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/マイオブジェ/ダイアログ/オブジェクトの保存に失敗しました", null, SystemDialog.TYPE.OK, null, null);
 			return;
 		}
 		if (this.successCallBack != null)
 		{
 			this.successCallBack(file_name);
 		}
-		GameMain.Instance.SysDlg.Show("オブジェクトを保存しました\nオブジェクト管理ウィンドウのマイオブジェクトから選択できます", SystemDialog.TYPE.OK, delegate
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/マイオブジェ/ダイアログ/オブジェクトを保存しましたオブジェクト管理ウィンドウのマイオブジェクトから選択できます", null, SystemDialog.TYPE.OK, delegate
 		{
 			GameMain.Instance.SysDlg.Close();
 			this.OnBtnCancel();

+ 7 - 7
Assembly-CSharp/PhotoModePoseSave.cs

@@ -61,12 +61,12 @@ public class PhotoModePoseSave : MonoBehaviour
 		string file_name = this.InputPoseName.value;
 		if (string.IsNullOrEmpty(file_name))
 		{
-			GameMain.Instance.SysDlg.Show("ポーズ名が記入されていません", SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/Pエディット/ダイアログ/ポーズ名が記入されていません", null, SystemDialog.TYPE.OK, null, null);
 			return;
 		}
 		if (0 <= file_name.IndexOfAny(invalidFileNameChars))
 		{
-			GameMain.Instance.SysDlg.Show("ポーズ名に使用できない文字が使われています", SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/Pエディット/ダイアログ/ポーズ名に使用できない文字が使われています", null, SystemDialog.TYPE.OK, null, null);
 			return;
 		}
 		if (this.mode_ == PhotoModePoseSave.Mode.Pose)
@@ -79,12 +79,12 @@ public class PhotoModePoseSave : MonoBehaviour
 		}
 		if (250 < file_name.Length)
 		{
-			GameMain.Instance.SysDlg.Show("ポーズ名が長すぎます", SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/Pエディット/ダイアログ/ポーズ名が長すぎます", null, SystemDialog.TYPE.OK, null, null);
 			return;
 		}
 		if (File.Exists(file_name))
 		{
-			GameMain.Instance.SysDlg.Show("データが既に存在しています\n上書きしますか?", SystemDialog.TYPE.YES_NO, delegate
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/Pエディット/ダイアログ/データが既に存在しています上書きしますか?", null, SystemDialog.TYPE.YES_NO, delegate
 			{
 				GameMain.Instance.SysDlg.Close();
 				this.Save(file_name);
@@ -137,12 +137,12 @@ public class PhotoModePoseSave : MonoBehaviour
 		}
 		catch
 		{
-			GameMain.Instance.SysDlg.Show("ポーズの保存に失敗しました", SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/Pエディット/ダイアログ/ポーズの保存に失敗しました", null, SystemDialog.TYPE.OK, null, null);
 			return;
 		}
 		if (this.mode_ == PhotoModePoseSave.Mode.Pose)
 		{
-			GameMain.Instance.SysDlg.Show("ポーズを保存しました\nモーションウィンドウのマイポーズから選択できます", SystemDialog.TYPE.OK, delegate
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/Pエディット/ダイアログ/ポーズを保存しましたモーションウィンドウのマイポーズから選択できます", null, SystemDialog.TYPE.OK, delegate
 			{
 				GameMain.Instance.SysDlg.Close();
 				this.OnBtnCancel();
@@ -150,7 +150,7 @@ public class PhotoModePoseSave : MonoBehaviour
 		}
 		else
 		{
-			GameMain.Instance.SysDlg.Show("ポーズを保存しました", SystemDialog.TYPE.OK, delegate
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/Pエディット/ダイアログ/ポーズを保存しました", null, SystemDialog.TYPE.OK, delegate
 			{
 				GameMain.Instance.SysDlg.Close();
 				this.OnBtnCancel();

+ 4 - 4
Assembly-CSharp/PhotoModeSaveAndLoad.cs

@@ -228,7 +228,7 @@ public class PhotoModeSaveAndLoad : MonoBehaviour
 			}
 			if (GameMain.Instance.SysDlg.IsDecided)
 			{
-				GameMain.Instance.SysDlg.Show("データを削除しますが宜しいですか?", SystemDialog.TYPE.OK_CANCEL, delegate
+				GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/セーブロード/データを削除しますが宜しいですか?", null, SystemDialog.TYPE.OK_CANCEL, delegate
 				{
 					GameMain.Instance.SysDlg.Close();
 					this.RemoveSave(save_path);
@@ -244,7 +244,7 @@ public class PhotoModeSaveAndLoad : MonoBehaviour
 				{
 					if (GameMain.Instance.SysDlg.IsDecided)
 					{
-						GameMain.Instance.SysDlg.Show("上書きして保存しますが宜しいですか?", SystemDialog.TYPE.OK_CANCEL, delegate
+						GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/セーブロード/上書きして保存しますが宜しいですか?", null, SystemDialog.TYPE.OK_CANCEL, delegate
 						{
 							GameMain.Instance.SysDlg.Close();
 							this.WriteSave(save_path, unit.title, unit.comment);
@@ -266,7 +266,7 @@ public class PhotoModeSaveAndLoad : MonoBehaviour
 				}
 				if (GameMain.Instance.SysDlg.IsDecided)
 				{
-					GameMain.Instance.SysDlg.Show("データをロードしますか?", SystemDialog.TYPE.OK_CANCEL, delegate
+					GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/セーブロード/データをロードしますか?", null, SystemDialog.TYPE.OK_CANCEL, delegate
 					{
 						GameMain.Instance.SysDlg.Close();
 						this.ReadSave(save_path);
@@ -450,7 +450,7 @@ public class PhotoModeSaveAndLoad : MonoBehaviour
 	private XElement CreateCommonData(string title, string comment)
 	{
 		string value = DateTime.ParseExact(DateTime.Now.ToString("yyyyMMddHHmmss"), "yyyyMMddHHmmss", null).ToString("yyyy.MM.dd HH:mm");
-		XElement xelement = new XElement("GameVersion", 1210);
+		XElement xelement = new XElement("GameVersion", 1230);
 		XElement xelement2 = new XElement("SaveTime", value);
 		XElement xelement3 = new XElement("Title", title);
 		XElement xelement4 = new XElement("Comment", comment);

+ 17 - 0
Assembly-CSharp/PhotoMotionData.cs

@@ -137,6 +137,7 @@ public class PhotoMotionData
 		}
 		HashSet<string> hashSet2 = new HashSet<string>();
 		PhotoMotionData.popup_menu_list_ = new List<KeyValuePair<string, UnityEngine.Object>>();
+		PhotoMotionData.popup_category_term_list = new List<string>();
 		for (int l = 0; l < list2.Count; l++)
 		{
 			string text = list2[l];
@@ -156,16 +157,19 @@ public class PhotoMotionData
 				{
 					hashSet2.Add(text);
 					PhotoMotionData.popup_menu_list_.Add(new KeyValuePair<string, UnityEngine.Object>(text, null));
+					PhotoMotionData.popup_category_term_list.Add("ScenePhotoMode/ポーズ/カテゴリー/" + text);
 				}
 			}
 		}
 		if (!PhotoMotionData.category_list_.ContainsKey("マイポーズ"))
 		{
 			PhotoMotionData.popup_menu_list_.Add(new KeyValuePair<string, UnityEngine.Object>("マイポーズ", null));
+			PhotoMotionData.popup_category_term_list.Add("ScenePhotoMode/ポーズ/カテゴリー/マイポーズ");
 			PhotoMotionData.category_list_.Add("マイポーズ", new List<PhotoMotionData>());
 		}
 		hashSet2.Clear();
 		PhotoMotionData.popup_menu_list_for_man_ = new List<KeyValuePair<string, UnityEngine.Object>>();
+		PhotoMotionData.popup_category_term_list_for_man = new List<string>();
 		for (int m = 0; m < list2.Count; m++)
 		{
 			string text2 = list2[m];
@@ -185,6 +189,7 @@ public class PhotoMotionData
 				{
 					hashSet2.Add(text2);
 					PhotoMotionData.popup_menu_list_for_man_.Add(new KeyValuePair<string, UnityEngine.Object>(text2, null));
+					PhotoMotionData.popup_category_term_list_for_man.Add("ScenePhotoMode/ポーズ/カテゴリー/" + text2);
 				}
 			}
 		}
@@ -237,6 +242,14 @@ public class PhotoMotionData
 		return photoMotionData;
 	}
 
+	public string nameTerm
+	{
+		get
+		{
+			return (!(this.category == "マイルーム")) ? ("ScenePhotoMode/ポーズ/" + this.id.ToString() + "/名前") : string.Empty;
+		}
+	}
+
 	public void Apply(Maid maid)
 	{
 		GameMain.Instance.ScriptMgr.StopMotionScript();
@@ -340,6 +353,8 @@ public class PhotoMotionData
 		}
 	}
 
+	public static List<string> popup_category_term_list { get; private set; }
+
 	public static List<KeyValuePair<string, UnityEngine.Object>> popup_category_list
 	{
 		get
@@ -348,6 +363,8 @@ public class PhotoMotionData
 		}
 	}
 
+	public static List<string> popup_category_term_list_for_man { get; private set; }
+
 	public static List<KeyValuePair<string, UnityEngine.Object>> popup_category_list_for_man
 	{
 		get

+ 6 - 0
Assembly-CSharp/PhotoNoCharaActive.cs

@@ -1,4 +1,5 @@
 using System;
+using I2.Loc;
 using UnityEngine;
 
 public class PhotoNoCharaActive : MonoBehaviour
@@ -7,6 +8,11 @@ public class PhotoNoCharaActive : MonoBehaviour
 	{
 		this.label = base.GetComponentInChildren<UILabel>();
 		this.label.text = this.drawText;
+		Localize localize = this.label.gameObject.AddComponent<Localize>();
+		if (localize != null)
+		{
+			localize.SetTerm("ScenePhotoMode/" + this.drawText);
+		}
 		this.label.enabled = false;
 		this.backupPos = this.mainContent.localPosition;
 	}

+ 4 - 1
Assembly-CSharp/PhotoTransTargetObject.cs

@@ -4,7 +4,7 @@ using UnityEngine;
 
 public class PhotoTransTargetObject : IComparable<PhotoTransTargetObject>
 {
-	public PhotoTransTargetObject(GameObject target, string draw_name, PhotoTransTargetObject.Type type, Vector2 scaleMinMax)
+	public PhotoTransTargetObject(GameObject target, string draw_name, string nameTerm, PhotoTransTargetObject.Type type, Vector2 scaleMinMax)
 	{
 		this.obj = target;
 		if (target != null)
@@ -14,6 +14,7 @@ public class PhotoTransTargetObject : IComparable<PhotoTransTargetObject>
 			this.init_rotate = target.transform.rotation;
 		}
 		this.draw_name = draw_name;
+		this.nameTerm = nameTerm;
 		this.type = type;
 		this.guid = Guid.NewGuid().ToString();
 		this.attachi_point = PhotoTransTargetObject.AttachPoint.Null;
@@ -177,6 +178,8 @@ public class PhotoTransTargetObject : IComparable<PhotoTransTargetObject>
 
 	public string draw_name;
 
+	public string nameTerm;
+
 	public PhotoTransTargetObject.Type type;
 
 	public WorldTransformAxis axis_obj;

+ 3 - 3
Assembly-CSharp/PlacementWindow.cs

@@ -273,7 +273,7 @@ public class PlacementWindow : BaseMaidPhotoWindow
 		{
 			maid.transform.GetChild(0).localScale = Vector3.zero;
 		}
-		this.transtarget_maid_dic_.Add(maid, new PhotoTransTargetObject(maid.gameObject, string.Empty, PhotoTransTargetObject.Type.Maid, new Vector2(this.PartsTransForm.ScaleInput.SliderMin, this.PartsTransForm.ScaleInput.SliderMax)));
+		this.transtarget_maid_dic_.Add(maid, new PhotoTransTargetObject(maid.gameObject, string.Empty, string.Empty, PhotoTransTargetObject.Type.Maid, new Vector2(this.PartsTransForm.ScaleInput.SliderMin, this.PartsTransForm.ScaleInput.SliderMax)));
 		if (GameMain.Instance.VRMode)
 		{
 			MeshRenderer componentInChildren = this.transtarget_maid_dic_[maid].axis_obj.GetComponentInChildren<MeshRenderer>();
@@ -446,11 +446,11 @@ public class PlacementWindow : BaseMaidPhotoWindow
 			}
 			if (!plateData.maid.boMAN && 12 <= num)
 			{
-				GameMain.Instance.SysDlg.Show("これ以上メイドを配置する事はできません", SystemDialog.TYPE.OK, null, null);
+				GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/キャラ選択/ダイアログ/これ以上メイドを配置する事はできません", null, SystemDialog.TYPE.OK, null, null);
 			}
 			else if (plateData.maid.boMAN && 5 <= num)
 			{
-				GameMain.Instance.SysDlg.Show("これ以上男を配置する事はできません", SystemDialog.TYPE.OK, null, null);
+				GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/キャラ選択/ダイアログ/これ以上男を配置する事はできません", null, SystemDialog.TYPE.OK, null, null);
 			}
 			else
 			{

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

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

+ 25 - 4
Assembly-CSharp/PopupAndButtonList.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using wf;
 
@@ -77,7 +78,7 @@ public class PopupAndButtonList : MonoBehaviour
 		}
 	}
 
-	public void SetData(Dictionary<string, List<KeyValuePair<string, object>>> popup_and_button_name_list, bool create_margin = false)
+	public void SetData(Dictionary<string, List<KeyValuePair<string, object>>> popup_and_button_name_list, Dictionary<string, List<string>> buttonTermList, bool create_margin = false)
 	{
 		if (popup_and_button_name_list != null && this.Grid.gameObject.transform.childCount == 0)
 		{
@@ -90,17 +91,23 @@ public class PopupAndButtonList : MonoBehaviour
 		}
 		foreach (KeyValuePair<string, List<KeyValuePair<string, object>>> keyValuePair in popup_and_button_name_list)
 		{
-			List<PopupAndButtonList.ElementData> list = new List<PopupAndButtonList.ElementData>();
+			List<string> list = null;
+			if (buttonTermList != null && buttonTermList.ContainsKey(keyValuePair.Key))
+			{
+				list = buttonTermList[keyValuePair.Key];
+			}
+			List<PopupAndButtonList.ElementData> list2 = new List<PopupAndButtonList.ElementData>();
 			for (int i = 0; i < keyValuePair.Value.Count; i++)
 			{
-				list.Add(new PopupAndButtonList.ElementData
+				list2.Add(new PopupAndButtonList.ElementData
 				{
 					draw_title = keyValuePair.Value[i].Key,
+					term = ((list == null) ? string.Empty : list[i]),
 					guid = Guid.NewGuid(),
 					value = keyValuePair.Value[i].Value
 				});
 			}
-			this.popup_and_button_name_list_.Add(keyValuePair.Key, list);
+			this.popup_and_button_name_list_.Add(keyValuePair.Key, list2);
 		}
 	}
 
@@ -139,6 +146,18 @@ public class PopupAndButtonList : MonoBehaviour
 			gameObject.SetActive(true);
 			gameObject.name = list[k].guid.ToString();
 			gameObject.GetComponentInChildren<UILabel>().text = list[k].draw_title;
+			if (GameUty.supportMultiLanguage)
+			{
+				Localize componentInChildren = gameObject.GetComponentInChildren<Localize>();
+				if (componentInChildren != null)
+				{
+					componentInChildren.enabled = !string.IsNullOrEmpty(list[k].term);
+					if (componentInChildren.enabled)
+					{
+						componentInChildren.SetTerm(list[k].term);
+					}
+				}
+			}
 		}
 		Utility.ResetNGUI(this.Grid);
 		Utility.ResetNGUI(this.ScrollView);
@@ -222,6 +241,8 @@ public class PopupAndButtonList : MonoBehaviour
 
 		public string draw_title;
 
+		public string term;
+
 		public object value;
 	}
 }

+ 38 - 4
Assembly-CSharp/PopupAndTabList.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using wf;
 
@@ -80,7 +81,7 @@ public class PopupAndTabList : MonoBehaviour
 		}
 	}
 
-	public void SetData(Dictionary<string, List<KeyValuePair<string, object>>> popup_and_button_name_list, bool create_margin = false)
+	public void SetData(Dictionary<string, List<KeyValuePair<string, object>>> popup_and_button_name_list, Dictionary<string, List<string>> buttonTermList, bool create_margin = false)
 	{
 		if (popup_and_button_name_list != null && this.TabPanel.gameObject.transform.childCount == 0)
 		{
@@ -95,17 +96,23 @@ public class PopupAndTabList : MonoBehaviour
 		}
 		foreach (KeyValuePair<string, List<KeyValuePair<string, object>>> keyValuePair in popup_and_button_name_list)
 		{
-			List<PopupAndTabList.ElementData> list = new List<PopupAndTabList.ElementData>();
+			List<string> list = null;
+			if (buttonTermList != null && buttonTermList.ContainsKey(keyValuePair.Key))
+			{
+				list = buttonTermList[keyValuePair.Key];
+			}
+			List<PopupAndTabList.ElementData> list2 = new List<PopupAndTabList.ElementData>();
 			for (int i = 0; i < keyValuePair.Value.Count; i++)
 			{
-				list.Add(new PopupAndTabList.ElementData
+				list2.Add(new PopupAndTabList.ElementData
 				{
 					draw_title = keyValuePair.Value[i].Key,
+					term = ((list == null) ? string.Empty : list[i]),
 					guid = Guid.NewGuid(),
 					value = keyValuePair.Value[i].Value
 				});
 			}
-			this.popup_and_button_name_list_.Add(keyValuePair.Key, list);
+			this.popup_and_button_name_list_.Add(keyValuePair.Key, list2);
 		}
 	}
 
@@ -162,6 +169,18 @@ public class PopupAndTabList : MonoBehaviour
 			gameObject.SetActive(true);
 			gameObject.name = list[k].guid.ToString();
 			gameObject.GetComponentInChildren<UILabel>().text = list[k].draw_title;
+			if (GameUty.supportMultiLanguage)
+			{
+				Localize componentInChildren = gameObject.GetComponentInChildren<Localize>();
+				if (componentInChildren != null)
+				{
+					componentInChildren.enabled = !string.IsNullOrEmpty(list[k].term);
+					if (componentInChildren.enabled)
+					{
+						componentInChildren.SetTerm(list[k].term);
+					}
+				}
+			}
 			if (gameObject.name == this.cur_select_btn_name_)
 			{
 				uiwftabButton = gameObject.GetComponent<UIWFTabButton>();
@@ -279,6 +298,19 @@ public class PopupAndTabList : MonoBehaviour
 		return result;
 	}
 
+	public List<string> popup_term_list
+	{
+		get
+		{
+			return this.PopUpList.PopupList.itemTerms;
+		}
+		set
+		{
+			this.PopUpList.PopupList.itemTerms = value;
+			this.PopUpList.PopupList.isLocalized = (value != null && 0 < value.Count);
+		}
+	}
+
 	public List<KeyValuePair<string, UnityEngine.Object>> popup_value_list
 	{
 		get
@@ -313,6 +345,8 @@ public class PopupAndTabList : MonoBehaviour
 
 		public string draw_title;
 
+		public string term;
+
 		public object value;
 	}
 }

+ 5 - 4
Assembly-CSharp/PoseEditWindow.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 
 public class PoseEditWindow : BaseMaidPhotoWindow
@@ -348,18 +349,18 @@ public class PoseEditWindow : BaseMaidPhotoWindow
 		{
 			return;
 		}
-		UILabel componentInChildren = this.ControlSelectBtnTab.GetSelectButtonObject().GetComponentInChildren<UILabel>();
+		Localize componentInChildren = this.ControlSelectBtnTab.GetSelectButtonObject().GetComponentInChildren<Localize>();
 		if (componentInChildren == null)
 		{
 			return;
 		}
 		Dictionary<string, string> maidStoreData = base.GetMaidStoreData(base.mgr.select_maid);
 		string key = "select_control_type";
-		if (componentInChildren.text == "胴体")
+		if (componentInChildren.Term.IndexOf("胴体") != -1)
 		{
 			this.ctrl_type_ = PoseEditWindow.ControlType.Body;
 		}
-		else if (componentInChildren.text == "手")
+		else if (componentInChildren.Term.IndexOf("手") != -1)
 		{
 			this.ctrl_type_ = PoseEditWindow.ControlType.Hand;
 		}
@@ -432,7 +433,7 @@ public class PoseEditWindow : BaseMaidPhotoWindow
 		}
 		if (!check_box.check && GameMain.Instance.SysDlg.IsDecided)
 		{
-			GameMain.Instance.SysDlg.Show("セーブしていないデータは失われます。\nOFFにしますか?", SystemDialog.TYPE.YES_NO, delegate
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/Pエディット/ダイアログ/セーブしていないデータは失われます。OFFにしますか?", null, SystemDialog.TYPE.YES_NO, delegate
 			{
 				check_box.check = false;
 				this.OnClickUseCheckRun(false);

+ 1 - 1
Assembly-CSharp/PresetCtrl.cs

@@ -230,7 +230,7 @@ public class PresetCtrl : MonoBehaviour
 	public void DeletePreset(string clickBtnName)
 	{
 		this.m_presetName = clickBtnName;
-		GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/プリセットを削除して宜しいですか。", SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.DeletePreset), null);
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/プリセットを削除して宜しいですか。", null, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.DeletePreset), null);
 	}
 
 	private void DeletePreset()

+ 9 - 1
Assembly-CSharp/ProfileCtrl.cs

@@ -340,7 +340,14 @@ public class ProfileCtrl : MonoBehaviour
 		ClassData<JobClass.Data> selectedJobClass = this.m_maidStatus.selectedJobClass;
 		if (selectedJobClass != null)
 		{
-			this.m_lMaidClassName.gameObject.GetComponent<Localize>().SetTerm(selectedJobClass.data.termName);
+			if (!GameUty.supportMultiLanguage)
+			{
+				this.m_lMaidClassName.text = selectedJobClass.data.drawName;
+			}
+			else
+			{
+				this.m_lMaidClassName.gameObject.GetComponent<Localize>().SetTerm(selectedJobClass.data.termName);
+			}
 			this.m_lMaidClassLevel.text = selectedJobClass.level.ToString();
 			this.m_lMaidClassExp.text = selectedJobClass.cur_exp.ToString();
 			this.m_lMaidClassRequiredExp.text = selectedJobClass.next_exp.ToString();
@@ -360,6 +367,7 @@ public class ProfileCtrl : MonoBehaviour
 		this.m_lHip.text = this.m_maidStatus.body.hip.ToString();
 		this.m_lCup.text = this.m_maidStatus.body.cup;
 		this.m_lRelation.GetComponent<Localize>().SetTerm(this.GetCondition(this.m_maidStatus.relation));
+		this.m_lConditionText.GetComponent<UILabel>().text = this.m_maidStatus.conditionText;
 		this.m_lConditionText.GetComponent<Localize>().SetTerm(this.m_maidStatus.conditionTermText);
 		this.m_lYotogiPlayCount.text = this.m_maidStatus.playCountYotogi.ToString();
 		this.m_lOthersPlayCount.text = this.m_maidStatus.playCountNightWork.ToString();

+ 4 - 0
Assembly-CSharp/RandomPresetContent.cs

@@ -397,6 +397,10 @@ public class RandomPresetContent
 		{
 			MPN.chikubicolor,
 			MPN.chikubi
+		},
+		{
+			MPN.eyewhite,
+			MPN.folder_eyewhite
 		}
 	};
 

+ 4 - 0
Assembly-CSharp/RandomPresetCtrl.cs

@@ -611,6 +611,10 @@ public class RandomPresetCtrl : MonoBehaviour
 		if (!flag)
 		{
 			maid.SetProp(smenuItem.m_strCateName, smenuItem.m_strMenuFileName, smenuItem.m_nMenuFileRID, false, false);
+			if (smenuItem.m_mpn == MPN.eye_hi && this.m_sceneEdit.isNewFace)
+			{
+				maid.SetProp(MPN.eye_hi_r, smenuItem.m_strMenuFileName, smenuItem.m_nMenuFileRID, false, false);
+			}
 		}
 	}
 

+ 4 - 3
Assembly-CSharp/ResultWorkCtrl.cs

@@ -3,6 +3,7 @@ using System.Collections;
 using System.Collections.Generic;
 using System.Linq;
 using com.workman.cm3d2.task;
+using I2.Loc;
 using PlayerStatus;
 using Schedule;
 using UnityEngine;
@@ -31,14 +32,14 @@ public class ResultWorkCtrl : BaseCreateViewerCtrl
 		this.m_resultWorkIconPrefab = Resources.Load<GameObject>("SceneDaily/ResultWork/Prefab/ResultWorkIcon");
 		this.m_hasActiveColor = false;
 		this.PlaySe(this.m_mgr.GetAudioClipName(ScheduleData.WorkSuccessLv.Success));
-		UILabel component2 = UTY.GetChildObject(this.m_goPanel, "MaidStatusViewer/Header/Frame_Time/Label", false).GetComponent<UILabel>();
+		Localize component2 = UTY.GetChildObject(this.m_goPanel, "MaidStatusViewer/Header/Frame_Time/Label", false).GetComponent<Localize>();
 		if (this.m_mgr.GetCurrentResultType() == ResultWorkMgr.ResultType.Daytime)
 		{
-			component2.text = "昼";
+			component2.SetTerm("System/昼");
 		}
 		else if (this.m_mgr.GetCurrentResultType() == ResultWorkMgr.ResultType.Night)
 		{
-			component2.text = "夜";
+			component2.SetTerm("System/夜");
 		}
 	}
 

+ 3 - 0
Assembly-CSharp/SceneADV.cs

@@ -1,4 +1,5 @@
 using System;
+using I2.Loc;
 using UnityEngine;
 
 public class SceneADV : MonoBehaviour
@@ -29,6 +30,8 @@ public class SceneADV : MonoBehaviour
 		int num3 = 456;
 		UILabel componentInChildren = this.titleBar.GetComponentInChildren<UILabel>();
 		componentInChildren.text = title;
+		Localize componentInChildren2 = this.titleBar.GetComponentInChildren<Localize>();
+		componentInChildren2.SetTerm("Scenario/スクリプト/タイトルバー/" + title);
 		componentInChildren.width = 0;
 		componentInChildren.MakePixelPerfect();
 		GameObject childObject = UTY.GetChildObject(this.titleBar, "BG", false);

+ 16 - 0
Assembly-CSharp/SceneCharacterSelect.cs

@@ -90,6 +90,20 @@ public class SceneCharacterSelect : WfScreenManager
 		}
 	}
 
+	public static void StoreCharaGuidStockList()
+	{
+		SceneCharacterSelect.backup_chara_guid_stock_list = new List<string>(SceneCharacterSelect.chara_guid_stock_list);
+	}
+
+	public static void ReStoreCharaGuidStockList()
+	{
+		SceneCharacterSelect.chara_guid_stock_list.Clear();
+		foreach (string item in SceneCharacterSelect.backup_chara_guid_stock_list)
+		{
+			SceneCharacterSelect.chara_guid_stock_list.Add(item);
+		}
+	}
+
 	public static bool IsSelectChara()
 	{
 		return 0 < SceneCharacterSelect.chara_guid_stock_list.Count;
@@ -198,6 +212,8 @@ public class SceneCharacterSelect : WfScreenManager
 
 	public static List<string> chara_guid_stock_list = new List<string>();
 
+	public static List<string> backup_chara_guid_stock_list = new List<string>();
+
 	public static List<Maid> select_maid_list = new List<Maid>();
 
 	private WfScreenMoveChildren move_screen_;

+ 282 - 63
Assembly-CSharp/SceneEdit.cs

@@ -4,11 +4,13 @@ using System.Collections.Generic;
 using System.IO;
 using System.Text;
 using System.Text.RegularExpressions;
+using CharacterEdit;
 using I2.Loc;
 using Kasizuki;
 using MaidStatus;
 using SceneEditWindow;
 using UnityEngine;
+using wf;
 
 public class SceneEdit : MonoBehaviour
 {
@@ -69,6 +71,14 @@ public class SceneEdit : MonoBehaviour
 		}
 	}
 
+	public bool isNewFace
+	{
+		get
+		{
+			return this.maid != null && this.maid.body0 != null && CMT.SearchObjName(this.maid.body0.m_trBones, "Ear_L", false) != null;
+		}
+	}
+
 	public List<SceneEdit.SCategory> CategoryList
 	{
 		get
@@ -809,7 +819,8 @@ public class SceneEdit : MonoBehaviour
 					m_mpn = keyValuePair2.Key,
 					m_nSliderValue = 500,
 					m_strCateName = keyValuePair2.Key.ToString(),
-					m_strMenuName = keyValuePair2.Value.m_strBtnPartsTypeName
+					m_strMenuName = keyValuePair2.Value.m_strBtnPartsTypeName,
+					m_requestNewFace = keyValuePair2.Value.m_requestNewFace
 				});
 			}
 		}
@@ -1177,7 +1188,7 @@ public class SceneEdit : MonoBehaviour
 				NDebug.Assert(afileBase.IsValid(), "メニューファイルが存在しません。 :" + f_strMenuFileName);
 				if (SceneEdit.m_byItemFileBuffer == null)
 				{
-					SceneEdit.m_byItemFileBuffer = new byte[Math.Max(500000, afileBase.GetSize())];
+					SceneEdit.m_byItemFileBuffer = new byte[System.Math.Max(500000, afileBase.GetSize())];
 				}
 				else if (SceneEdit.m_byItemFileBuffer.Length < afileBase.GetSize())
 				{
@@ -1397,8 +1408,11 @@ public class SceneEdit : MonoBehaviour
 			UnityEngine.Object @object = Resources.Load("SceneEdit/MainMenu/Prefab/ButtonCate");
 			GameObject gameObject = NGUITools.AddChild(this.m_Panel_Category.goGrid, @object as GameObject);
 			UILabel uilabel = gameObject.GetComponentsInChildren<UILabel>(true)[0];
-			Localize localize = uilabel.gameObject.AddComponent<Localize>();
-			localize.SetTerm("SceneEdit/カテゴリー/" + scategory.m_strCateName);
+			Localize component = uilabel.gameObject.GetComponent<Localize>();
+			if (component != null)
+			{
+				component.SetTerm("SceneEdit/カテゴリー/" + scategory.m_strCateName);
+			}
 			ButtonEdit buttonEdit = gameObject.GetComponentsInChildren<ButtonEdit>(true)[0];
 			buttonEdit.m_Category = scategory;
 			UIButton uibutton = gameObject.GetComponentsInChildren<UIButton>(true)[0];
@@ -1409,8 +1423,8 @@ public class SceneEdit : MonoBehaviour
 			}
 			buttonEdit.m_goFrame = gameObject.transform.Find("Frame").gameObject;
 			buttonEdit.m_goFrame.transform.GetComponent<UISprite>().enabled = false;
-			UIButton component = buttonEdit.GetComponent<UIButton>();
-			buttonEdit.m_colBtnDefault = component.defaultColor;
+			UIButton component2 = buttonEdit.GetComponent<UIButton>();
+			buttonEdit.m_colBtnDefault = component2.defaultColor;
 			this.m_listBtnCate.Add(gameObject);
 		}
 		this.m_Panel_Category.gcScrollView.ResetPosition();
@@ -1422,6 +1436,11 @@ public class SceneEdit : MonoBehaviour
 		this.m_Panel_ColorSet.SetActive(false);
 		this.m_Panel_GroupSet.SetActive(false);
 		this.m_CheckBoxMayuDrawPriority.gameObject.SetActive(false);
+		if (this.highlightSelector != null)
+		{
+			this.highlightSelector.visible = true;
+			this.highlightSelector.visible = false;
+		}
 		return true;
 	}
 
@@ -1466,24 +1485,30 @@ public class SceneEdit : MonoBehaviour
 		for (int n = 0; n < f_cate.m_listPartsType.Count; n++)
 		{
 			SceneEdit.SPartsType spartsType = f_cate.m_listPartsType[n];
-			UnityEngine.Object @object = Resources.Load("SceneEdit/MainMenu/Prefab/ButtonCate");
-			GameObject gameObject = NGUITools.AddChild(this.m_Panel_PartsType.goGrid, @object as GameObject);
-			UILabel uilabel = gameObject.GetComponentsInChildren<UILabel>(true)[0];
-			Localize localize = uilabel.gameObject.AddComponent<Localize>();
-			localize.SetTerm("SceneEdit/カテゴリー/サブ/" + spartsType.m_strPartsTypeName);
-			ButtonEdit buttonEdit = gameObject.GetComponentsInChildren<ButtonEdit>(true)[0];
-			buttonEdit.m_PartsType = spartsType;
-			UIButton uibutton = gameObject.GetComponentsInChildren<UIButton>(true)[0];
-			uibutton.isEnabled = spartsType.m_isEnabled;
-			if (uibutton.isEnabled)
+			if (MPN.EarNone > spartsType.m_mpn || spartsType.m_mpn > MPN.EarScl || PluginData.IsEnabled("GP001"))
 			{
-				EventDelegate.Add(uibutton.onClick, new EventDelegate.Callback(this.ClickCallback));
+				UnityEngine.Object @object = Resources.Load("SceneEdit/MainMenu/Prefab/ButtonCate");
+				GameObject gameObject = NGUITools.AddChild(this.m_Panel_PartsType.goGrid, @object as GameObject);
+				UILabel uilabel = gameObject.GetComponentsInChildren<UILabel>(true)[0];
+				Localize component = uilabel.gameObject.GetComponent<Localize>();
+				if (component != null)
+				{
+					component.SetTerm("SceneEdit/カテゴリー/サブ/" + spartsType.m_strPartsTypeName);
+				}
+				ButtonEdit buttonEdit = gameObject.GetComponentsInChildren<ButtonEdit>(true)[0];
+				buttonEdit.m_PartsType = spartsType;
+				UIButton uibutton = gameObject.GetComponentsInChildren<UIButton>(true)[0];
+				uibutton.isEnabled = spartsType.m_isEnabled;
+				if (uibutton.isEnabled)
+				{
+					EventDelegate.Add(uibutton.onClick, new EventDelegate.Callback(this.ClickCallback));
+				}
+				buttonEdit.m_goFrame = gameObject.transform.Find("Frame").gameObject;
+				buttonEdit.m_goFrame.transform.GetComponent<UISprite>().enabled = false;
+				UIButton component2 = buttonEdit.GetComponent<UIButton>();
+				buttonEdit.m_colBtnDefault = component2.defaultColor;
+				this.m_listBtnPartsType.Add(gameObject);
 			}
-			buttonEdit.m_goFrame = gameObject.transform.Find("Frame").gameObject;
-			buttonEdit.m_goFrame.transform.GetComponent<UISprite>().enabled = false;
-			UIButton component = buttonEdit.GetComponent<UIButton>();
-			buttonEdit.m_colBtnDefault = component.defaultColor;
-			this.m_listBtnPartsType.Add(gameObject);
 		}
 		this.m_Panel_PartsType.ResetScrollPos(0.5f);
 		this.m_Panel_MenuItem.ResetScrollPos(0f);
@@ -1529,6 +1554,10 @@ public class SceneEdit : MonoBehaviour
 		}
 		this.m_listBtnGroupMember.Clear();
 		float num = -1f;
+		if (this.highlightSelector != null)
+		{
+			this.highlightSelector.visible = false;
+		}
 		if (f_pt.m_eType == SceneEditInfo.CCateNameType.EType.Item || f_pt.m_eType == SceneEditInfo.CCateNameType.EType.Set)
 		{
 			if (!string.IsNullOrEmpty(this.last_select_category_name_))
@@ -1606,6 +1635,10 @@ public class SceneEdit : MonoBehaviour
 				}
 			}
 			uipanelSet.gcUIGrid.GetComponent<UIGrid>().enabled = true;
+			if (f_pt.m_mpn == MPN.eye_hi && this.highlightSelector != null && this.isNewFace)
+			{
+				this.highlightSelector.visible = true;
+			}
 			this.UpdateSelectedMenuItem(f_pt);
 			this.last_select_category_name_ = f_pt.m_strPartsTypeName;
 		}
@@ -1613,20 +1646,44 @@ public class SceneEdit : MonoBehaviour
 		{
 			this.customPartsWindowVisibleButton.windowVisible = false;
 			this.customPartsWindowVisibleButton.visible = false;
+			this.m_CheckBoxMayuDrawPriority.gameObject.SetActive(false);
 			this.m_Panel_MenuItem.SetActive(false);
 			this.m_Panel_SetItem.SetActive(false);
-			this.m_Panel_SliderItem.SetActive(true);
 			this.m_Panel_ColorSet.SetActive(false);
 			this.m_Panel_GroupSet.SetActive(false);
-			this.m_CheckBoxMayuDrawPriority.gameObject.SetActive(false);
+			this.m_Panel_SliderItem.SetActive(true);
 			bool flag2 = false;
-			for (int n = 0; n < f_pt.m_listMenu.Count; n++)
+			foreach (SceneEdit.SMenuItem smenuItem2 in f_pt.m_listMenu)
 			{
-				SceneEdit.SMenuItem smenuItem2 = f_pt.m_listMenu[n];
-				SceneEdit.SliderItemSet sliderItemSet2 = new SceneEdit.SliderItemSet(this.m_Panel_SliderItem.goGrid, smenuItem2);
-				EventDelegate.Add(sliderItemSet2.gcSlider.onChange, new EventDelegate.Callback(this.SlideCallback));
-				this.m_listSliderItem.Add(sliderItemSet2);
-				flag2 |= (smenuItem2.m_mpn == MPN.MuneYawaraka);
+				if (!smenuItem2.m_requestNewFace || this.isNewFace)
+				{
+					SceneEdit.SliderItemSet sliderItemSet2;
+					if (smenuItem2.m_mpn == MPN.EarNone)
+					{
+						SceneEdit.SwitchItemSet switchItemSet = new SceneEdit.SwitchItemSet();
+						switchItemSet.Create(this.m_Panel_SliderItem.goGrid, smenuItem2);
+						switchItemSet.onClickEvent = delegate(bool earNone, SceneEdit.SMenuItem menu)
+						{
+							int num2 = (!earNone) ? 0 : 1;
+							MaidProp prop = this.maid.GetProp(menu.m_strCateName);
+							if (prop.value != num2)
+							{
+								this.maid.SetProp(menu.m_strCateName, num2, false);
+								this.UpdateSliders();
+								this.maid.AllProcPropSeqStart();
+							}
+						};
+						sliderItemSet2 = switchItemSet;
+					}
+					else
+					{
+						sliderItemSet2 = new SceneEdit.SliderItemSet();
+						sliderItemSet2.Create(this.m_Panel_SliderItem.goGrid, smenuItem2);
+						EventDelegate.Add(sliderItemSet2.gcSlider.onChange, new EventDelegate.Callback(this.SlideCallback));
+						flag2 |= (smenuItem2.m_mpn == MPN.MuneYawaraka);
+					}
+					this.m_listSliderItem.Add(sliderItemSet2);
+				}
 			}
 			BaseMgr<BodyStatusMgr>.Instance.OpenPanel(flag2);
 			this.UpdateSliders();
@@ -1647,10 +1704,6 @@ public class SceneEdit : MonoBehaviour
 		}
 	}
 
-	private void ClosePanel_MenuItem()
-	{
-	}
-
 	private void UpdateSelectedMenuItem(SceneEdit.SPartsType f_pt)
 	{
 		Maid maid = this.m_maid;
@@ -1689,7 +1742,9 @@ public class SceneEdit : MonoBehaviour
 				break;
 			}
 		}
+		bool flag2 = f_pt.m_mpn == MPN.eye_hi && this.isNewFace;
 		int num = (this.modeType != SceneEdit.ModeType.CostumeEdit) ? prop.nFileNameRID : prop.nTempFileNameRID;
+		int num2 = (!flag2) ? -1 : maid.GetProp(MPN.eye_hi_r).nFileNameRID;
 		if (num != 0)
 		{
 			for (int l = 0; l < this.m_listBtnMenuItem.Count; l++)
@@ -1698,51 +1753,55 @@ public class SceneEdit : MonoBehaviour
 				SceneEdit.SMenuItem menuItem = menuItemSet.gcBtnEdit.m_MenuItem;
 				if (!menuItem.m_bGroupLeader || !this.m_bUseGroup)
 				{
-					bool flag2 = menuItem.m_nMenuFileRID == num;
-					if (flag && (!flag2 || hashSet.Count != 0))
+					bool flag3 = menuItem.m_nMenuFileRID == num;
+					if (flag && (!flag3 || hashSet.Count != 0))
 					{
-						flag2 = hashSet.Contains(menuItem.m_nMenuFileRID);
+						flag3 = hashSet.Contains(menuItem.m_nMenuFileRID);
 					}
-					if (flag2)
+					if (flag3)
 					{
 						menuItemSet.Selected(true);
 						smenuItem = menuItem;
-						bool flag3 = this.customPartsWindow.SetItem(menuItem);
+						bool flag4 = this.customPartsWindow.SetItem(menuItem);
 						if (this.modeType == SceneEdit.ModeType.CostumeEdit)
 						{
-							flag3 = false;
+							flag4 = false;
 						}
-						if (!flag3)
+						if (!flag4)
 						{
 							this.customPartsWindowVisibleButton.windowVisible = false;
 						}
-						this.customPartsWindowVisibleButton.visible = flag3;
+						this.customPartsWindowVisibleButton.visible = flag4;
+					}
+					else if (flag2 && menuItem.m_nMenuFileRID == num2)
+					{
+						menuItemSet.Selected(true);
 					}
 				}
 				else
 				{
 					NDebug.Assert(hashSet.Count == 0, "SubPropとグループが競合しています");
-					bool flag4 = false;
-					int num2 = 0;
-					while (num2 < menuItem.m_listMember.Count && !flag4)
+					bool flag5 = false;
+					int num3 = 0;
+					while (num3 < menuItem.m_listMember.Count && !flag5)
 					{
-						flag4 |= (menuItem.m_listMember[num2].m_nMenuFileRID == num);
-						num2++;
+						flag5 |= (menuItem.m_listMember[num3].m_nMenuFileRID == num);
+						num3++;
 					}
-					if (flag4)
+					if (flag5)
 					{
 						menuItemSet.Selected(true);
 						smenuItem = menuItem;
-						bool flag5 = this.customPartsWindow.SetItem(menuItem);
+						bool flag6 = this.customPartsWindow.SetItem(menuItem);
 						if (this.modeType == SceneEdit.ModeType.CostumeEdit)
 						{
-							flag5 = false;
+							flag6 = false;
 						}
-						if (!flag5)
+						if (!flag6)
 						{
 							this.customPartsWindowVisibleButton.windowVisible = false;
 						}
-						this.customPartsWindowVisibleButton.visible = flag5;
+						this.customPartsWindowVisibleButton.visible = flag6;
 					}
 				}
 			}
@@ -1991,7 +2050,7 @@ public class SceneEdit : MonoBehaviour
 				int num;
 				if (0 <= prop2.value && prop.value == 0)
 				{
-					num = (int)Math.Round((double)(-30f * ((float)(prop2.value - prop2.min) / (float)(prop2.max - prop2.min))), MidpointRounding.AwayFromZero);
+					num = (int)System.Math.Round((double)(-30f * ((float)(prop2.value - prop2.min) / (float)(prop2.max - prop2.min))), MidpointRounding.AwayFromZero);
 				}
 				else
 				{
@@ -2004,6 +2063,11 @@ public class SceneEdit : MonoBehaviour
 			{
 				sliderItemSet.SetValue((float)(prop.value - prop.min) / (float)(prop.max - prop.min), prop.value.ToString());
 			}
+			if (MPN.EarNone < sliderItemSet.gcBtnEdit.m_SliderItem.m_mpn && sliderItemSet.gcBtnEdit.m_SliderItem.m_mpn <= MPN.EarScl)
+			{
+				bool isEnabled = maid.GetProp(MPN.EarNone).value == 0;
+				sliderItemSet.isEnabled = isEnabled;
+			}
 		}
 		BaseMgr<BodyStatusMgr>.Instance.UpdateBodyStatus();
 	}
@@ -2094,6 +2158,10 @@ public class SceneEdit : MonoBehaviour
 			this.m_Panel_ColorSet.SetActive(false);
 			this.m_Panel_GroupSet.SetActive(false);
 			this.m_CheckBoxMayuDrawPriority.gameObject.SetActive(false);
+			if (this.highlightSelector != null)
+			{
+				this.highlightSelector.visible = false;
+			}
 			BaseMgr<RandomPresetMgr>.Instance.CloseRandomPresetPanel();
 			BaseMgr<PresetMgr>.Instance.ClosePresetPanel();
 			BaseMgr<ProfileMgr>.Instance.CloseProfilePanel();
@@ -2214,7 +2282,18 @@ public class SceneEdit : MonoBehaviour
 				}
 				if (!flag)
 				{
-					if (this.modeType == SceneEdit.ModeType.CostumeEdit)
+					if (componentInChildren.m_MenuItem.m_mpn == MPN.eye_hi && this.isNewFace)
+					{
+						if (this.highlightSelector.selectItem == HighlightSelector.SelectItem.EyeR || this.highlightSelector.selectItem == HighlightSelector.SelectItem.Eye)
+						{
+							maid.SetProp(MPN.eye_hi_r, componentInChildren.m_MenuItem.m_strMenuFileName, componentInChildren.m_MenuItem.m_nMenuFileRID, false, false);
+						}
+						if (this.highlightSelector.selectItem == HighlightSelector.SelectItem.EyeL || this.highlightSelector.selectItem == HighlightSelector.SelectItem.Eye)
+						{
+							maid.SetProp(componentInChildren.m_MenuItem.m_strCateName, componentInChildren.m_MenuItem.m_strMenuFileName, componentInChildren.m_MenuItem.m_nMenuFileRID, false, false);
+						}
+					}
+					else if (this.modeType == SceneEdit.ModeType.CostumeEdit)
 					{
 						maid.SetProp(componentInChildren.m_MenuItem.m_strCateName, componentInChildren.m_MenuItem.m_strMenuFileName, componentInChildren.m_MenuItem.m_nMenuFileRID, true, false);
 					}
@@ -2362,7 +2441,7 @@ public class SceneEdit : MonoBehaviour
 		if (componentInChildren.m_SliderItem.m_strCateName == "MuneL")
 		{
 			int num = prop.min - 30;
-			int num2 = (int)Math.Round((double)((float)num + (float)(prop.max - num) * UIProgressBar.current.value), MidpointRounding.AwayFromZero);
+			int num2 = (int)System.Math.Round((double)((float)num + (float)(prop.max - num) * UIProgressBar.current.value), MidpointRounding.AwayFromZero);
 			if (0 <= num2)
 			{
 				maid.SetProp(componentInChildren.m_SliderItem.m_strCateName, num2, false);
@@ -2534,6 +2613,68 @@ public class SceneEdit : MonoBehaviour
 		}
 	}
 
+	public void OnCharaLoadCompleted()
+	{
+		foreach (SceneEdit.SCategory scategory in this.m_listCategory)
+		{
+			foreach (SceneEdit.SPartsType spartsType in scategory.m_listPartsType)
+			{
+				bool flag = 0 < spartsType.m_listMenu.Count;
+				if (spartsType.m_eType == SceneEditInfo.CCateNameType.EType.Item)
+				{
+					flag = SceneEditInfo.m_dicPartsTypePair[spartsType.m_mpn].m_requestNewFace;
+				}
+				else
+				{
+					foreach (SceneEdit.SMenuItem smenuItem in spartsType.m_listMenu)
+					{
+						if (!smenuItem.m_requestNewFace)
+						{
+							flag = false;
+							break;
+						}
+					}
+				}
+				if (flag)
+				{
+					spartsType.m_isEnabled = this.isNewFace;
+				}
+				if (spartsType.m_mpn == MPN.accmimi)
+				{
+					spartsType.m_isEnabled = (this.maid.GetProp(MPN.EarNone).value == 0);
+					if (!spartsType.m_isEnabled && !this.isNewFace)
+					{
+						spartsType.m_isEnabled = true;
+					}
+				}
+			}
+		}
+		foreach (GameObject gameObject in this.m_listBtnPartsType)
+		{
+			ButtonEdit buttonEdit = gameObject.GetComponentsInChildren<ButtonEdit>(true)[0];
+			SceneEdit.SPartsType partsType = buttonEdit.m_PartsType;
+			UIButton uibutton = gameObject.GetComponentsInChildren<UIButton>(true)[0];
+			uibutton.isEnabled = partsType.m_isEnabled;
+			if (uibutton.isEnabled && (uibutton.onClick == null || uibutton.onClick.Count == 0))
+			{
+				EventDelegate.Add(uibutton.onClick, new EventDelegate.Callback(this.ClickCallback));
+			}
+		}
+		if (this.isNewFace && this.maid.GetProp(MPN.EarNone).value != 0)
+		{
+			MaidProp prop = this.maid.GetProp(MPN.accmimi);
+			if (prop != null && prop.strFileName != CM3.dicDelItem[MPN.accmimi])
+			{
+				string text = CM3.dicDelItem[MPN.accmimi];
+				int hashCode = text.ToLower().GetHashCode();
+				this.maid.SetProp(MPN.accmimi, text, hashCode, false, false);
+				this.m_maid.AllProcPropSeqStart();
+				return;
+			}
+		}
+		this.customViewWindow.UpdateAllItem();
+	}
+
 	private void OnEditOk()
 	{
 		if (GameMain.Instance.SysDlg.IsDecided && !GameMain.Instance.CharacterMgr.IsBusy())
@@ -2572,7 +2713,7 @@ public class SceneEdit : MonoBehaviour
 	private void Conform()
 	{
 		this.m_maid.boMabataki = false;
-		GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/このメイドにしますか?", SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.OnEndDlgOk), new SystemDialog.OnClick(this.OnEndDlgCancel));
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/このメイドにしますか?", null, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.OnEndDlgOk), new SystemDialog.OnClick(this.OnEndDlgCancel));
 	}
 
 	private void OnEndDlgOk()
@@ -2585,7 +2726,7 @@ public class SceneEdit : MonoBehaviour
 		this.m_maid.boMabataki = false;
 		if (this.modeType == SceneEdit.ModeType.CostumeEdit)
 		{
-			for (int i = 53; i <= 52; i++)
+			for (int i = 67; i <= 66; i++)
 			{
 				this.maid.ResetProp((MPN)i, true);
 			}
@@ -2720,6 +2861,12 @@ public class SceneEdit : MonoBehaviour
 		case MPN.skin:
 			mpn = MPN.folder_skin;
 			break;
+		default:
+			if (mpn == MPN.eyewhite)
+			{
+				mpn = MPN.folder_eyewhite;
+			}
+			break;
 		case MPN.underhair:
 			mpn = MPN.folder_underhair;
 			break;
@@ -2764,6 +2911,12 @@ public class SceneEdit : MonoBehaviour
 		case MPN.skin:
 			mpn = MPN.folder_skin;
 			break;
+		default:
+			if (mpn == MPN.eyewhite)
+			{
+				mpn = MPN.folder_eyewhite;
+			}
+			break;
 		case MPN.underhair:
 			mpn = MPN.folder_underhair;
 			break;
@@ -3000,7 +3153,7 @@ public class SceneEdit : MonoBehaviour
 				}
 			}
 		}
-		if (GameMain.Instance.CharacterMgr.IsBusy())
+		if (GameMain.Instance.CharacterMgr.IsBusy() || this.customViewWindow == null || this.customViewWindow.itemList == null)
 		{
 			this.updateCustomViewFlag = true;
 			return;
@@ -3008,7 +3161,7 @@ public class SceneEdit : MonoBehaviour
 		if (this.updateCustomViewFlag)
 		{
 			this.updateCustomViewFlag = false;
-			this.customViewWindow.UpdateAllItem();
+			this.OnCharaLoadCompleted();
 		}
 	}
 
@@ -3043,6 +3196,10 @@ public class SceneEdit : MonoBehaviour
 	private WindowPartsWindowVisible customPartsWindowVisibleButton;
 
 	[SerializeField]
+	[Tooltip("ハイライト選択のゲームオブジェクト")]
+	private HighlightSelector highlightSelector;
+
+	[SerializeField]
 	public SceneEdit.SubPropMpnData[] subPropDatas;
 
 	private SceneEdit.UIPanelSet m_Panel_Category;
@@ -3202,6 +3359,8 @@ public class SceneEdit : MonoBehaviour
 
 		public string m_strMenuName = string.Empty;
 
+		public bool m_requestNewFace;
+
 		public MPN m_mpn;
 
 		public bool m_bColor;
@@ -3566,7 +3725,17 @@ public class SceneEdit : MonoBehaviour
 
 	private class SliderItemSet
 	{
-		public SliderItemSet(GameObject f_goParentGrid, SceneEdit.SMenuItem f_mi)
+		public virtual bool isEnabled
+		{
+			set
+			{
+				this.gcSlider.enabled = value;
+				this.gcSlider.GetComponent<UIButton>().isEnabled = value;
+				this.gcSlider.thumb.GetComponent<UIButton>().isEnabled = value;
+			}
+		}
+
+		public virtual void Create(GameObject f_goParentGrid, SceneEdit.SMenuItem f_mi)
 		{
 			this.mpn = f_mi.m_mpn;
 			UnityEngine.Object @object = Resources.Load("SceneEdit/MainMenu/Prefab/Slider");
@@ -3584,7 +3753,7 @@ public class SceneEdit : MonoBehaviour
 			this.gcBtnEdit.m_SliderItem = f_mi;
 		}
 
-		public void Clear()
+		public virtual void Clear()
 		{
 			if (this.goMain != null)
 			{
@@ -3592,7 +3761,7 @@ public class SceneEdit : MonoBehaviour
 			}
 		}
 
-		public void SetValue(float f_fValue, string f_strValue = null)
+		public virtual void SetValue(float f_fValue, string f_strValue = null)
 		{
 			this.gcSlider.value = f_fValue;
 			if (f_strValue == null)
@@ -3615,7 +3784,57 @@ public class SceneEdit : MonoBehaviour
 
 		public ButtonEdit gcBtnEdit;
 
-		private MPN mpn;
+		protected MPN mpn;
+	}
+
+	private class SwitchItemSet : SceneEdit.SliderItemSet
+	{
+		public override void Create(GameObject f_goParentGrid, SceneEdit.SMenuItem f_mi)
+		{
+			this.mpn = f_mi.m_mpn;
+			this.goMain = Utility.CreatePrefab(f_goParentGrid, "SceneEdit/MainMenu/Prefab/Switch", true);
+			this.gcBtnEdit = this.goMain.GetComponentsInChildren<ButtonEdit>(true)[0];
+			this.tabPanel = UTY.GetChildObject(this.goMain, "CategoryBtns", false).GetComponent<UIWFTabPanel>();
+			this.buttonAri = UTY.GetChildObject(this.tabPanel.gameObject, "ButtonAri/Button", false).GetComponent<UIWFTabButton>();
+			this.buttonNasi = UTY.GetChildObject(this.tabPanel.gameObject, "ButtonNasi/Button", false).GetComponent<UIWFTabButton>();
+			this.gcBtnEdit.m_SliderItem = f_mi;
+			this.tabPanel.UpdateChildren();
+			EventDelegate.Add(this.buttonAri.onClick, delegate()
+			{
+				if (this.onClickEvent != null)
+				{
+					this.onClickEvent(false, this.gcBtnEdit.m_SliderItem);
+				}
+			});
+			EventDelegate.Add(this.buttonNasi.onClick, delegate()
+			{
+				if (this.onClickEvent != null)
+				{
+					this.onClickEvent(true, this.gcBtnEdit.m_SliderItem);
+				}
+			});
+			GameObject childObject = UTY.GetChildObject(this.goMain, "CategoryTitle/Name", false);
+			this.gcLabel = childObject.GetComponent<UILabel>();
+			Localize localize = this.gcLabel.gameObject.AddComponent<Localize>();
+			localize.SetTerm("SceneEdit/カテゴリー/スライダー/" + f_mi.m_strMenuName);
+		}
+
+		public override void SetValue(float f_fValue, string f_strValue = null)
+		{
+			UIWFTabButton uiwftabButton = (f_fValue != 0f) ? this.buttonNasi : this.buttonAri;
+			if (!uiwftabButton.isSelected)
+			{
+				this.tabPanel.Select(uiwftabButton);
+			}
+		}
+
+		private UIWFTabPanel tabPanel;
+
+		private UIWFTabButton buttonAri;
+
+		private UIWFTabButton buttonNasi;
+
+		public Action<bool, SceneEdit.SMenuItem> onClickEvent;
 	}
 
 	[Serializable]

+ 7 - 0
Assembly-CSharp/SceneEditInfo.cs

@@ -75,6 +75,11 @@ public static class SceneEditInfo
 									}
 									ccateNameType.m_strBtnPartsTypeName = array[1];
 								}
+								bool flag = csvParser.GetCellAsString(num++, i) == "×";
+								if (flag)
+								{
+								}
+								ccateNameType.m_requestNewFace = (csvParser.GetCellAsString(num++, i) == "〇");
 								NDebug.Assert(!SceneEditInfo.dicPartsTypePair_.ContainsKey(key), "MPN[" + key.ToString() + "]が重複しています");
 								if (!dictionary.ContainsKey(ccateNameType.m_eMenuCate))
 								{
@@ -235,6 +240,8 @@ public static class SceneEditInfo
 
 		public string m_strBtnPartsTypeName;
 
+		public bool m_requestNewFace;
+
 		public enum EType
 		{
 			Item,

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

@@ -31,7 +31,7 @@ namespace SceneEditWindow
 			{
 				this.mpn = MPN.chikubicolor;
 			}
-			bool result = false;
+			bool flag = false;
 			int num = maid.GetProp(this.mpn).nFileNameRID;
 			if (this.sceneEdit.modeType == SceneEdit.ModeType.CostumeEdit && maid.GetProp(this.mpn).nTempFileNameRID != 0)
 			{
@@ -48,12 +48,19 @@ namespace SceneEditWindow
 					}
 				}
 			}
+			bool flag2 = true;
+			if (this.requestNewFace && !this.sceneEdit.isNewFace)
+			{
+				this.settingRid = 0;
+				num = -1;
+				flag2 = false;
+			}
 			if (num != this.settingRid)
 			{
-				result = true;
+				flag = true;
 				this.settingRid = num;
-				SceneEdit.SMenuItem menuItem = this.GetMenuItem(maid, this.mpn);
-				if (menuItem == null || (menuItem.m_boDelOnly && this.defaultIconTexture != null) || (menuItem.m_texIcon == null && this.defaultIconTexture != null))
+				SceneEdit.SMenuItem smenuItem = (!flag2) ? null : this.GetMenuItem(maid, this.mpn);
+				if (smenuItem == null || (smenuItem.m_boDelOnly && this.defaultIconTexture != null) || (smenuItem.m_texIcon == null && this.defaultIconTexture != null))
 				{
 					this.iconTex.mainTexture = this.defaultIconTexture;
 					this.button.tweenTarget = null;
@@ -64,9 +71,9 @@ namespace SceneEditWindow
 						component.from = (component.to = this.iconTex.color);
 					}
 				}
-				else if (menuItem.m_texIcon)
+				else if (smenuItem.m_texIcon)
 				{
-					this.iconTex.mainTexture = menuItem.m_texIcon;
+					this.iconTex.mainTexture = smenuItem.m_texIcon;
 					this.button.tweenTarget = this.buttonTweenTarget;
 					this.iconTex.color = Color.white;
 					TweenColor component2 = base.GetComponent<TweenColor>();
@@ -85,7 +92,19 @@ namespace SceneEditWindow
 			{
 				this.iconTex.color = this.button.disabledColor;
 			}
-			return result;
+			else if (!flag)
+			{
+				SceneEdit.SMenuItem smenuItem2 = (!flag2) ? null : this.GetMenuItem(maid, this.mpn);
+				if (smenuItem2 == null || (smenuItem2.m_boDelOnly && this.defaultIconTexture != null) || (smenuItem2.m_texIcon == null && this.defaultIconTexture != null))
+				{
+					this.iconTex.color = new Color(1f, 1f, 1f, 0.58f);
+				}
+				else
+				{
+					this.iconTex.color = Color.white;
+				}
+			}
+			return flag;
 		}
 
 		public SceneEdit.SMenuItem GetMenuItem(Maid maid, MPN mpn)
@@ -116,7 +135,14 @@ namespace SceneEditWindow
 				flag = true;
 				break;
 			default:
-				if (mpn == MPN.chikubicolor)
+				if (mpn != MPN.chikubicolor)
+				{
+					if (mpn == MPN.eyewhite)
+					{
+						mpn = MPN.folder_eyewhite;
+					}
+				}
+				else
 				{
 					mpn = MPN.chikubi;
 					flag = true;
@@ -192,6 +218,9 @@ namespace SceneEditWindow
 		[NonSerialized]
 		public Texture2D defaultIconTexture;
 
+		[NonSerialized]
+		public bool requestNewFace;
+
 		private UIButton button;
 
 		private GameObject buttonTweenTarget;

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

@@ -37,6 +37,7 @@ namespace SceneEditWindow
 								NDebug.AssertParseError("MPN", e);
 							}
 							item.iconTexName = Path.ChangeExtension(csvParser.GetCellAsString(num++, i).ToString(), "tex");
+							item.requestNewFace = (csvParser.GetCellAsString(num++, i) == "〇");
 							CustomViewItemData.itemList.Add(item);
 						}
 					}
@@ -51,6 +52,8 @@ namespace SceneEditWindow
 			public MPN mpn;
 
 			public string iconTexName;
+
+			public bool requestNewFace;
 		}
 	}
 }

+ 33 - 11
Assembly-CSharp/SceneEditWindow/CustomViewWindow.cs

@@ -8,6 +8,8 @@ namespace SceneEditWindow
 	[AddComponentMenu("SceneEditWindow/CustomViewWindow")]
 	public class CustomViewWindow : BasePhotoWindow
 	{
+		public List<CustomViewItem> itemList { get; private set; }
+
 		public override string windowName
 		{
 			get
@@ -39,22 +41,44 @@ namespace SceneEditWindow
 
 		public void Create()
 		{
-			if (this.itemList.Count != 0)
+			if (this.itemList != null)
 			{
 				return;
 			}
+			this.itemList = new List<CustomViewItem>();
+			HashSet<MPN> hashSet = new HashSet<MPN>();
+			foreach (SceneEdit.SCategory scategory in this.sceneEdit.CategoryList)
+			{
+				foreach (SceneEdit.SPartsType spartsType in scategory.m_listPartsType)
+				{
+					hashSet.Add(spartsType.m_mpn);
+					foreach (SceneEdit.SMenuItem smenuItem in spartsType.m_listMenu)
+					{
+						hashSet.Add(smenuItem.m_mpn);
+						if (smenuItem.m_eColorSetMPN != MPN.null_mpn)
+						{
+							hashSet.Add(smenuItem.m_eColorSetMPN);
+						}
+					}
+				}
+			}
+			bool flag = hashSet.Contains(MPN.eyewhite);
 			foreach (CustomViewItemData.ItemData itemData in CustomViewItemData.itemList)
 			{
-				if (!this.texDic.ContainsKey(itemData.iconTexName))
+				if (hashSet.Contains(itemData.mpn) && (!itemData.requestNewFace || PluginData.IsEnabled("GP001")))
 				{
-					this.texDic.Add(itemData.iconTexName, ImportCM.CreateTexture(itemData.iconTexName));
+					if (!this.texDic.ContainsKey(itemData.iconTexName))
+					{
+						this.texDic.Add(itemData.iconTexName, ImportCM.CreateTexture(itemData.iconTexName));
+					}
+					CustomViewItem componentInChildren = Utility.CreatePrefab(this.pageItemGrits[itemData.page].gameObject, "SceneEdit/WindowParts/CustomItem", true).GetComponentInChildren<CustomViewItem>();
+					componentInChildren.sceneEdit = this.sceneEdit;
+					componentInChildren.mpn = itemData.mpn;
+					componentInChildren.requestNewFace = itemData.requestNewFace;
+					componentInChildren.defaultIconTexture = this.texDic[itemData.iconTexName];
+					componentInChildren.GetComponentInChildren<UIWidget>().depth = 15;
+					this.itemList.Add(componentInChildren);
 				}
-				CustomViewItem componentInChildren = Utility.CreatePrefab(this.pageItemGrits[itemData.page].gameObject, "SceneEdit/WindowParts/CustomItem", true).GetComponentInChildren<CustomViewItem>();
-				componentInChildren.sceneEdit = this.sceneEdit;
-				componentInChildren.mpn = itemData.mpn;
-				componentInChildren.defaultIconTexture = this.texDic[itemData.iconTexName];
-				componentInChildren.GetComponentInChildren<UIWidget>().depth = 15;
-				this.itemList.Add(componentInChildren);
 			}
 			foreach (UIGrid grid in this.pageItemGrits)
 			{
@@ -104,8 +128,6 @@ namespace SceneEditWindow
 		[SerializeField]
 		private UIGrid[] pageItemGrits;
 
-		private List<CustomViewItem> itemList = new List<CustomViewItem>();
-
 		private Dictionary<string, Texture2D> texDic = new Dictionary<string, Texture2D>();
 	}
 }

+ 26 - 4
Assembly-CSharp/SceneEmpireLifeMode.cs

@@ -51,12 +51,25 @@ public class SceneEmpireLifeMode : MonoBehaviour
 			});
 		}
 		this.m_ButtonOK.onClick.AddListener(new UnityAction(this.OnClickOK));
+		this.m_ButtonShuffle.onClick.AddListener(delegate()
+		{
+			this.MaidRandomAllocate();
+			this.ShowMaidIconsOfEventData();
+		});
 		if (SceneEmpireLifeMode.m_SelectedEventObject != null)
 		{
 		}
 		if (this.lifeModeMgr.executedEventList.Count <= 0)
 		{
 			this.lifeModeMgr.CreateStoryEvent();
+			int num = (10 > this.lifeModeMgr.lifeModeAllMaidList.Count) ? 1 : 2;
+			for (int i = 0; i < num; i++)
+			{
+				if (UnityEngine.Random.Range(0, 100) > 80)
+				{
+					this.lifeModeMgr.CreateRandomEventOfNowState();
+				}
+			}
 			this.lifeModeMgr.AllMaidRandomAllocate();
 			this.lifeModeMgr.CreateEventListOfMaidAllocateData();
 			Debug.Log("イベントを作成しました。");
@@ -122,6 +135,14 @@ public class SceneEmpireLifeMode : MonoBehaviour
 	{
 		this.lifeModeMgr.DeleteNowEventList();
 		this.lifeModeMgr.CreateStoryEvent();
+		int num = (10 > this.lifeModeMgr.lifeModeAllMaidList.Count) ? 1 : 2;
+		for (int i = 0; i < num; i++)
+		{
+			if (UnityEngine.Random.Range(0, 100) > 80)
+			{
+				this.lifeModeMgr.CreateRandomEventOfNowState();
+			}
+		}
 		this.lifeModeMgr.AllMaidRandomAllocate();
 		this.lifeModeMgr.CreateEventListOfMaidAllocateData();
 	}
@@ -163,10 +184,6 @@ public class SceneEmpireLifeMode : MonoBehaviour
 	public void ShowMaidIconsOfEventData()
 	{
 		List<EmpireLifeModeManager.EventDataObject> nowEventList = this.lifeModeMgr.nowEventList;
-		Debug.LogFormat("現在の発生イベント数 : {0}", new object[]
-		{
-			nowEventList.Count
-		});
 		foreach (EmpireLifeModeFacilityUI.FacilityLifeModeViewer facilityLifeModeViewer in this.m_FacilityListUI.GetAllItem())
 		{
 			SceneEmpireLifeMode.<ShowMaidIconsOfEventData>c__AnonStorey2 <ShowMaidIconsOfEventData>c__AnonStorey = new SceneEmpireLifeMode.<ShowMaidIconsOfEventData>c__AnonStorey2();
@@ -186,6 +203,7 @@ public class SceneEmpireLifeMode : MonoBehaviour
 				{
 					RawImage component = viewer.transform.Find("event type icon").GetComponent<RawImage>();
 					component.texture = EmpireLifeModeAPI.GetIconScenarioType(<ShowMaidIconsOfEventData>c__AnonStorey.eventList[eventIndex].targetEvent.dataScenarioType);
+					component.gameObject.SetActive(component.texture != null);
 					viewer.Show<Transform>(<ShowMaidIconsOfEventData>c__AnonStorey.eventList[eventIndex].targetMaidList.Count, delegate(int maidIndex, Transform trans)
 					{
 						RawImage componentInChildren = trans.GetComponentInChildren<RawImage>();
@@ -203,6 +221,7 @@ public class SceneEmpireLifeMode : MonoBehaviour
 								componentInChildren2.text = string.Empty;
 							}
 						}
+						trans.SetAsFirstSibling();
 					});
 					Button component2 = viewer.GetComponent<Button>();
 					component2.onClick.AddListener(delegate()
@@ -220,6 +239,9 @@ public class SceneEmpireLifeMode : MonoBehaviour
 	[SerializeField]
 	private Button m_ButtonOK;
 
+	[SerializeField]
+	private Button m_ButtonShuffle;
+
 	private string m_StrScenarioStartLabel;
 
 	private string m_StrOKLabel;

+ 155 - 76
Assembly-CSharp/SceneFacilityManagement.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using I2.Loc;
 using PlayerStatus;
 using UnityEngine;
 using UnityEngine.Events;
@@ -8,6 +9,16 @@ using UnityEngine.UI;
 
 public class SceneFacilityManagement : MonoBehaviour
 {
+	public static string GetDialogText(string termName)
+	{
+		return LocalizationManager.GetTranslation("Dialog/施設/" + termName, true, 0, true, false, null, null);
+	}
+
+	public static string GetDialogText(string termName, params string[] args)
+	{
+		return string.Format(LocalizationManager.GetTranslation("Dialog/施設/" + termName, true, 0, true, false, null, null), args);
+	}
+
 	private FacilityManager FacilityMgr
 	{
 		get
@@ -360,15 +371,21 @@ public class SceneFacilityManagement : MonoBehaviour
 		string messageText = string.Empty;
 		if (facility == null)
 		{
-			messageText = "空き部屋に施設を配置しますか?";
+			messageText = SceneFacilityManagement.GetDialogText("空き部屋に施設を配置しますか?");
 		}
 		else
 		{
-			messageText = "『" + facility.facilityName + "』\nが配置されています。\n施設を変更しますか?";
+			messageText = SceneFacilityManagement.GetDialogText("『{0}』が配置されています。施設を変更しますか?", new string[]
+			{
+				facility.facilityName
+			});
 		}
 		if (facility && !FacilityDataTable.GetFacilityCanBeDestroy(facility.param.typeID, true))
 		{
-			this.OpenDialog("『" + facility.facilityName + "』\nは変更出来ない施設です。", SystemDialog.TYPE.OK, null, null);
+			this.OpenDialog(SceneFacilityManagement.GetDialogText("『{0}』は変更出来ない施設です。", new string[]
+			{
+				facility.facilityName
+			}), SystemDialog.TYPE.OK, null, null);
 		}
 		else
 		{
@@ -510,7 +527,12 @@ public class SceneFacilityManagement : MonoBehaviour
 			Facility.FacilityStatus facilityStatus = <SetUpFacilityTypeList>c__AnonStorey.canBePlaceFacilityDataArray[i];
 			Toggle componentInChildren = trans.GetComponentInChildren<Toggle>();
 			Text componentInChildren2 = trans.GetComponentInChildren<Text>();
+			Localize component2 = componentInChildren2.GetComponent<Localize>();
 			componentInChildren2.text = facilityStatus.name;
+			if (component2 != null)
+			{
+				component2.SetTerm(facilityStatus.termName);
+			}
 			componentInChildren.onValueChanged.AddListener(delegate(bool value)
 			{
 				if (!value)
@@ -563,18 +585,23 @@ public class SceneFacilityManagement : MonoBehaviour
 			componentInChildren.Show<Transform>(recipeArray.Length, delegate(int i, Transform trans)
 			{
 				Text component = trans.Find("Text Recipe Name").GetComponent<Text>();
-				Text component2 = trans.Find("Text Recipe Number").GetComponent<Text>();
-				uGUIListViewer component3 = trans.Find("parent materials").GetComponent<uGUIListViewer>();
-				uGUIListViewer component4 = trans.Find("parent conditions").GetComponent<uGUIListViewer>();
-				uGUIListViewer component5 = trans.Find("parent default parameter").GetComponent<uGUIListViewer>();
-				uGUIListViewer component6 = trans.Find("parent additional parameter").GetComponent<uGUIListViewer>();
+				Localize component2 = component.GetComponent<Localize>();
+				Text component3 = trans.Find("Text Recipe Number").GetComponent<Text>();
+				uGUIListViewer component4 = trans.Find("parent materials").GetComponent<uGUIListViewer>();
+				uGUIListViewer component5 = trans.Find("parent conditions").GetComponent<uGUIListViewer>();
+				uGUIListViewer component6 = trans.Find("parent default parameter").GetComponent<uGUIListViewer>();
+				uGUIListViewer component7 = trans.Find("parent additional parameter").GetComponent<uGUIListViewer>();
 				Facility.PowerUpRecipe facilityPowerUpRecipe = FacilityDataTable.GetFacilityPowerUpRecipe(recipeArray[i].id);
 				component.text = facilityPowerUpRecipe.name;
-				component2.text = string.Format("RECIPE {0}", i + 1);
-				this.SetUpRecipeMaterialList(component3, recipeArray[i]);
-				this.SetUpRecipeConditionList(component4, recipeArray[i].id);
-				this.SetUpFacilityParams(component5, recipeArray[i].defaultParameter);
-				this.SetUpFacilityParams(component6, recipeArray[i].additionalParameter);
+				if (component2 != null)
+				{
+					component2.SetTerm("SceneFacilityManagement/強化種類/" + facilityPowerUpRecipe.name);
+				}
+				component3.text = string.Format("RECIPE {0}", i + 1);
+				this.SetUpRecipeMaterialList(component4, recipeArray[i]);
+				this.SetUpRecipeConditionList(component5, recipeArray[i].id);
+				this.SetUpFacilityParams(component6, recipeArray[i].defaultParameter);
+				this.SetUpFacilityParams(component7, recipeArray[i].additionalParameter);
 			});
 		}
 		else
@@ -582,17 +609,22 @@ public class SceneFacilityManagement : MonoBehaviour
 			componentInChildren.Show<Transform>(1, delegate(int i, Transform trans)
 			{
 				Text component = trans.Find("Text Recipe Name").GetComponent<Text>();
-				Text component2 = trans.Find("Text Recipe Number").GetComponent<Text>();
-				uGUIListViewer component3 = trans.Find("parent materials").GetComponent<uGUIListViewer>();
-				uGUIListViewer component4 = trans.Find("parent conditions").GetComponent<uGUIListViewer>();
-				uGUIListViewer component5 = trans.Find("parent default parameter").GetComponent<uGUIListViewer>();
-				uGUIListViewer component6 = trans.Find("parent additional parameter").GetComponent<uGUIListViewer>();
+				Localize component2 = component.GetComponent<Localize>();
+				Text component3 = trans.Find("Text Recipe Number").GetComponent<Text>();
+				uGUIListViewer component4 = trans.Find("parent materials").GetComponent<uGUIListViewer>();
+				uGUIListViewer component5 = trans.Find("parent conditions").GetComponent<uGUIListViewer>();
+				uGUIListViewer component6 = trans.Find("parent default parameter").GetComponent<uGUIListViewer>();
+				uGUIListViewer component7 = trans.Find("parent additional parameter").GetComponent<uGUIListViewer>();
 				component.text = "レシピ無し";
-				component2.text = string.Empty;
-				component3.ResetList();
+				if (component2 != null)
+				{
+					component2.SetTerm("SceneFacilityManagement/強化種類/レシピ無し");
+				}
+				component3.text = string.Empty;
 				component4.ResetList();
 				component5.ResetList();
 				component6.ResetList();
+				component7.ResetList();
 			});
 		}
 	}
@@ -623,8 +655,10 @@ public class SceneFacilityManagement : MonoBehaviour
 			int categoryID = materialCategoryIDArray[i];
 			int materialID = recipeData.materialIDArray[i];
 			Text component = trans.Find("Text Category Name").GetComponent<Text>();
-			Text component2 = trans.Find("Text Category Number").GetComponent<Text>();
-			Text component3 = trans.Find("Text Material Name").GetComponent<Text>();
+			Localize component2 = component.GetComponent<Localize>();
+			Text component3 = trans.Find("Text Category Number").GetComponent<Text>();
+			Text component4 = trans.Find("Text Material Name").GetComponent<Text>();
+			Localize component5 = component4.GetComponent<Localize>();
 			string facilityPowerUpMaterialCategoryName = FacilityDataTable.GetFacilityPowerUpMaterialCategoryName(categoryID);
 			string text = string.Empty;
 			if (FacilityDataTable.IsExistPowerUpMaterial(materialID))
@@ -632,8 +666,16 @@ public class SceneFacilityManagement : MonoBehaviour
 				text = FacilityDataTable.GetFacilityPowerUpMaterial(materialID).name;
 			}
 			component.text = facilityPowerUpMaterialCategoryName;
-			component3.text = text;
-			component2.text = string.Format("CATEGORY {0}", i + 1);
+			if (component2 != null)
+			{
+				component2.SetTerm("SceneFacilityManagement/強化素材カテゴリー/" + facilityPowerUpMaterialCategoryName);
+			}
+			component4.text = text;
+			if (component5 != null)
+			{
+				component5.SetTerm("SceneFacilityManagement/強化素材/" + text);
+			}
+			component3.text = string.Format("CATEGORY {0}", i + 1);
 		});
 	}
 
@@ -643,7 +685,12 @@ public class SceneFacilityManagement : MonoBehaviour
 		listViewer.Show<Transform>(data.conditions.Length, delegate(int i, Transform trans)
 		{
 			Text[] componentsInChildren = trans.GetComponentsInChildren<Text>();
+			Localize component = componentsInChildren[0].GetComponent<Localize>();
 			componentsInChildren[0].text = data.conditions[i];
+			if (component != null)
+			{
+				component.SetTerm("SceneFacilityManagement/実行条件/" + data.conditions[i]);
+			}
 			componentsInChildren[1].text = (i + 1).ToString();
 		});
 	}
@@ -661,8 +708,17 @@ public class SceneFacilityManagement : MonoBehaviour
 		listViewer.Show<Transform>(paramList.Count, delegate(int i, Transform trans)
 		{
 			Text componentInChildren = trans.GetComponentInChildren<Text>();
+			Localize component = componentInChildren.GetComponent<Localize>();
 			KeyValuePair<string, int> keyValuePair = paramList[i];
 			componentInChildren.text = string.Format("{0}  +{1}", keyValuePair.Key, keyValuePair.Value);
+			if (component != null)
+			{
+				component.TermArgs = new Localize.ArgsPair[]
+				{
+					Localize.ArgsPair.Create(keyValuePair.Value.ToString())
+				};
+				component.SetTerm("SceneFacilityManagement/パラメータ/" + keyValuePair.Key);
+			}
 		});
 	}
 
@@ -689,30 +745,39 @@ public class SceneFacilityManagement : MonoBehaviour
 		}
 		if (num > this.nowMoney)
 		{
-			this.OpenDialog("資金が不足する設定は出来ません。", SystemDialog.TYPE.OK, null, null);
+			this.OpenDialog(SceneFacilityManagement.GetDialogText("資金が不足する設定は出来ません。"), SystemDialog.TYPE.OK, null, null);
 			return;
 		}
 		string messageText = string.Empty;
+		string defaultName = this.m_CreatingFacility.defaultName;
+		string translation = LocalizationManager.GetTranslation(this.m_CreatingFacility.defaultTermName, true, 0, true, false, null, null);
+		if (!string.IsNullOrEmpty(translation))
+		{
+			defaultName = translation;
+		}
 		if (facility)
 		{
-			messageText = string.Concat(new string[]
+			messageText = SceneFacilityManagement.GetDialogText("『{0}』を、『{1}』に設定します。よろしいですか?", new string[]
 			{
-				"『",
 				facility.facilityName,
-				"』\nを、\n『",
-				this.m_CreatingFacility.defaultName,
-				"』\nに設定します。\nよろしいですか?"
+				defaultName
 			});
 		}
 		else
 		{
-			messageText = "『" + this.m_CreatingFacility.defaultName + "』\nを設定します。\nよろしいですか?";
+			messageText = SceneFacilityManagement.GetDialogText("『{0}』を設定します。よろしいですか?", new string[]
+			{
+				defaultName
+			});
 		}
 		this.OpenDialog(messageText, SystemDialog.TYPE.YES_NO, delegate
 		{
 			Facility nextDayFacility2 = this.FacilityMgr.CreateNewFacility(this.m_CreatingFacility.param.typeID);
 			this.FacilityMgr.SetNextDayFacility(this.m_SelectingFacilityIndex, nextDayFacility2);
-			this.OpenDialog("『" + this.m_CreatingFacility.defaultName + "』\nを設定しました。", SystemDialog.TYPE.OK, delegate
+			this.OpenDialog(SceneFacilityManagement.GetDialogText("『{0}』を設定しました。", new string[]
+			{
+				defaultName
+			}), SystemDialog.TYPE.OK, delegate
 			{
 				this.ResetFacilityTypeList();
 				this.ResetFacilityPowerUpList();
@@ -736,10 +801,10 @@ public class SceneFacilityManagement : MonoBehaviour
 
 	public void ButtonEvent_RESET_FacilityConstruction()
 	{
-		string messageText = "施設の設定をリセットします。\nよろしいですか?";
-		this.OpenDialog(messageText, SystemDialog.TYPE.YES_NO, delegate
+		string dialogText = SceneFacilityManagement.GetDialogText("施設の設定をリセットします。よろしいですか?");
+		this.OpenDialog(dialogText, SystemDialog.TYPE.YES_NO, delegate
 		{
-			this.OpenDialog("施設の設定をリセットしました。", SystemDialog.TYPE.OK, delegate
+			this.OpenDialog(SceneFacilityManagement.GetDialogText("施設の設定をリセットしました。"), SystemDialog.TYPE.OK, delegate
 			{
 				this.ResetFacilityTypeList();
 				this.ResetFacilityPowerUpList();
@@ -777,10 +842,16 @@ public class SceneFacilityManagement : MonoBehaviour
 		string facilityName = facility.facilityName;
 		if (this.CheckFacilityCanBeDestroy(facility))
 		{
-			this.OpenDialog("『" + facilityName + "』\nを撤去します。\nよろしいですか?\n※施設強化及び服装設定もリセットされます", SystemDialog.TYPE.YES_NO, delegate
+			this.OpenDialog(SceneFacilityManagement.GetDialogText("『{0}』を撤去します。よろしいですか?※施設強化及び服装設定もリセットされます", new string[]
+			{
+				facilityName
+			}), SystemDialog.TYPE.YES_NO, delegate
 			{
 				this.FacilityMgr.SetNextDayFacility(this.m_SelectingFacilityIndex, null);
-				this.OpenDialog("『" + facilityName + "』\nを撤去予定に設定しました。", SystemDialog.TYPE.OK, null, null);
+				this.OpenDialog(SceneFacilityManagement.GetDialogText("『{0}』を撤去予定に設定しました。", new string[]
+				{
+					facilityName
+				}), SystemDialog.TYPE.OK, null, null);
 				this.OpenFacilityUIConstruction();
 			}, delegate
 			{
@@ -788,14 +859,17 @@ public class SceneFacilityManagement : MonoBehaviour
 		}
 		else
 		{
-			this.OpenDialog("『" + facilityName + "』\nは撤去出来ない施設です。", SystemDialog.TYPE.OK, null, null);
+			this.OpenDialog(SceneFacilityManagement.GetDialogText("『{0}』は撤去出来ない施設です。", new string[]
+			{
+				facilityName
+			}), SystemDialog.TYPE.OK, null, null);
 		}
 	}
 
 	public void OpenNowFacilityList(bool isOn)
 	{
-		SceneFacilityManagement.<OpenNowFacilityList>c__AnonStoreyB <OpenNowFacilityList>c__AnonStoreyB = new SceneFacilityManagement.<OpenNowFacilityList>c__AnonStoreyB();
-		<OpenNowFacilityList>c__AnonStoreyB.$this = this;
+		SceneFacilityManagement.<OpenNowFacilityList>c__AnonStoreyC <OpenNowFacilityList>c__AnonStoreyC = new SceneFacilityManagement.<OpenNowFacilityList>c__AnonStoreyC();
+		<OpenNowFacilityList>c__AnonStoreyC.$this = this;
 		if (!isOn)
 		{
 			return;
@@ -818,41 +892,41 @@ public class SceneFacilityManagement : MonoBehaviour
 		this.m_UIButtonOK.onClick.AddListener(new UnityAction(this.ButtonEvent_OK_OpenMainMenu));
 		this.SetOKButtonEnable(true);
 		Facility[] facilityArray = this.FacilityMgr.GetFacilityArray();
-		<OpenNowFacilityList>c__AnonStoreyB.enableFacilityArray = new List<Facility>();
+		<OpenNowFacilityList>c__AnonStoreyC.enableFacilityArray = new List<Facility>();
 		for (int j = 0; j < facilityArray.Length; j++)
 		{
 			if (facilityArray[j])
 			{
-				<OpenNowFacilityList>c__AnonStoreyB.enableFacilityArray.Add(facilityArray[j]);
+				<OpenNowFacilityList>c__AnonStoreyC.enableFacilityArray.Add(facilityArray[j]);
 			}
 		}
 		uGUIListViewer component = this.m_UIFacilityTypeList.GetComponent<uGUIListViewer>();
-		component.Show<Transform>(<OpenNowFacilityList>c__AnonStoreyB.enableFacilityArray.Count, delegate(int i, Transform trans)
+		component.Show<Transform>(<OpenNowFacilityList>c__AnonStoreyC.enableFacilityArray.Count, delegate(int i, Transform trans)
 		{
 			Text componentInChildren = trans.GetComponentInChildren<Text>();
 			Toggle componentInChildren2 = trans.GetComponentInChildren<Toggle>();
-			componentInChildren.text = <OpenNowFacilityList>c__AnonStoreyB.enableFacilityArray[i].facilityName;
+			componentInChildren.text = <OpenNowFacilityList>c__AnonStoreyC.enableFacilityArray[i].facilityName;
 			componentInChildren2.onValueChanged.AddListener(delegate(bool value)
 			{
 				if (!value)
 				{
 					return;
 				}
-				<OpenNowFacilityList>c__AnonStoreyB.ShowFacilityPowerUpList(<OpenNowFacilityList>c__AnonStoreyB.enableFacilityArray[i]);
-				if (!<OpenNowFacilityList>c__AnonStoreyB.m_UIFacilityInfoMiniWindow.gameObject.activeSelf)
+				<OpenNowFacilityList>c__AnonStoreyC.ShowFacilityPowerUpList(<OpenNowFacilityList>c__AnonStoreyC.enableFacilityArray[i]);
+				if (!<OpenNowFacilityList>c__AnonStoreyC.m_UIFacilityInfoMiniWindow.gameObject.activeSelf)
 				{
-					<OpenNowFacilityList>c__AnonStoreyB.m_UIFacilityInfoMiniWindow.gameObject.SetActive(true);
+					<OpenNowFacilityList>c__AnonStoreyC.m_UIFacilityInfoMiniWindow.gameObject.SetActive(true);
 				}
-				<OpenNowFacilityList>c__AnonStoreyB.m_UIFacilityInfoMiniWindow.SetFacilityInfo(<OpenNowFacilityList>c__AnonStoreyB.enableFacilityArray[i], true);
-				<OpenNowFacilityList>c__AnonStoreyB.m_UIFacilityInfoMiniWindow.viewType = FacilityInfoUI.ViewType.DefaultMode;
+				<OpenNowFacilityList>c__AnonStoreyC.m_UIFacilityInfoMiniWindow.SetFacilityInfo(<OpenNowFacilityList>c__AnonStoreyC.enableFacilityArray[i], true);
+				<OpenNowFacilityList>c__AnonStoreyC.m_UIFacilityInfoMiniWindow.viewType = FacilityInfoUI.ViewType.DefaultMode;
 			});
 		});
 	}
 
 	public void OpenFacilityInfoList(bool isOn)
 	{
-		SceneFacilityManagement.<OpenFacilityInfoList>c__AnonStoreyD <OpenFacilityInfoList>c__AnonStoreyD = new SceneFacilityManagement.<OpenFacilityInfoList>c__AnonStoreyD();
-		<OpenFacilityInfoList>c__AnonStoreyD.$this = this;
+		SceneFacilityManagement.<OpenFacilityInfoList>c__AnonStoreyE <OpenFacilityInfoList>c__AnonStoreyE = new SceneFacilityManagement.<OpenFacilityInfoList>c__AnonStoreyE();
+		<OpenFacilityInfoList>c__AnonStoreyE.$this = this;
 		if (!isOn)
 		{
 			return;
@@ -875,7 +949,7 @@ public class SceneFacilityManagement : MonoBehaviour
 		this.m_UIButtonOK.onClick.AddListener(new UnityAction(this.ButtonEvent_OK_OpenMainMenu));
 		this.SetOKButtonEnable(true);
 		Facility.FacilityStatus[] facilityStatusArray = FacilityDataTable.GetFacilityStatusArray(true);
-		<OpenFacilityInfoList>c__AnonStoreyD.enableFacilityArray = new List<Facility.FacilityStatus>();
+		<OpenFacilityInfoList>c__AnonStoreyE.enableFacilityArray = new List<Facility.FacilityStatus>();
 		for (int j = 0; j < facilityStatusArray.Length; j++)
 		{
 			FacilityDataTable.FacilityDefaultData facilityDefaultData = FacilityDataTable.GetFacilityDefaultData(facilityStatusArray[j].typeID, true);
@@ -892,30 +966,35 @@ public class SceneFacilityManagement : MonoBehaviour
 				{
 					goto IL_18C;
 				}
-				<OpenFacilityInfoList>c__AnonStoreyD.enableFacilityArray.Add(facilityStatusArray[j]);
+				<OpenFacilityInfoList>c__AnonStoreyE.enableFacilityArray.Add(facilityStatusArray[j]);
 			}
 			IL_18C:;
 		}
 		uGUIListViewer component = this.m_UIFacilityTypeList.GetComponent<uGUIListViewer>();
-		component.Show<Transform>(<OpenFacilityInfoList>c__AnonStoreyD.enableFacilityArray.Count, delegate(int i, Transform trans)
+		component.Show<Transform>(<OpenFacilityInfoList>c__AnonStoreyE.enableFacilityArray.Count, delegate(int i, Transform trans)
 		{
 			Text componentInChildren = trans.GetComponentInChildren<Text>();
-			Toggle componentInChildren2 = trans.GetComponentInChildren<Toggle>();
-			componentInChildren.text = <OpenFacilityInfoList>c__AnonStoreyD.enableFacilityArray[i].name;
-			componentInChildren2.onValueChanged.AddListener(delegate(bool value)
+			Localize componentInChildren2 = trans.GetComponentInChildren<Localize>();
+			Toggle componentInChildren3 = trans.GetComponentInChildren<Toggle>();
+			componentInChildren.text = <OpenFacilityInfoList>c__AnonStoreyE.enableFacilityArray[i].name;
+			if (componentInChildren2 != null)
+			{
+				componentInChildren2.SetTerm(<OpenFacilityInfoList>c__AnonStoreyE.enableFacilityArray[i].termName);
+			}
+			componentInChildren3.onValueChanged.AddListener(delegate(bool value)
 			{
 				if (!value)
 				{
 					return;
 				}
-				<OpenFacilityInfoList>c__AnonStoreyD.m_CreatingFacility.Init(<OpenFacilityInfoList>c__AnonStoreyD.enableFacilityArray[i].typeID);
-				<OpenFacilityInfoList>c__AnonStoreyD.ShowFacilityPowerUpList(<OpenFacilityInfoList>c__AnonStoreyD.m_CreatingFacility);
-				if (!<OpenFacilityInfoList>c__AnonStoreyD.m_UIFacilityInfoMiniWindow.gameObject.activeSelf)
+				<OpenFacilityInfoList>c__AnonStoreyE.m_CreatingFacility.Init(<OpenFacilityInfoList>c__AnonStoreyE.enableFacilityArray[i].typeID);
+				<OpenFacilityInfoList>c__AnonStoreyE.ShowFacilityPowerUpList(<OpenFacilityInfoList>c__AnonStoreyE.m_CreatingFacility);
+				if (!<OpenFacilityInfoList>c__AnonStoreyE.m_UIFacilityInfoMiniWindow.gameObject.activeSelf)
 				{
-					<OpenFacilityInfoList>c__AnonStoreyD.m_UIFacilityInfoMiniWindow.gameObject.SetActive(true);
+					<OpenFacilityInfoList>c__AnonStoreyE.m_UIFacilityInfoMiniWindow.gameObject.SetActive(true);
 				}
-				<OpenFacilityInfoList>c__AnonStoreyD.m_UIFacilityInfoMiniWindow.SetFacilityInfo(<OpenFacilityInfoList>c__AnonStoreyD.m_CreatingFacility, true);
-				<OpenFacilityInfoList>c__AnonStoreyD.m_UIFacilityInfoMiniWindow.viewType = FacilityInfoUI.ViewType.ConstructMode;
+				<OpenFacilityInfoList>c__AnonStoreyE.m_UIFacilityInfoMiniWindow.SetFacilityInfo(<OpenFacilityInfoList>c__AnonStoreyE.m_CreatingFacility, true);
+				<OpenFacilityInfoList>c__AnonStoreyE.m_UIFacilityInfoMiniWindow.viewType = FacilityInfoUI.ViewType.ConstructMode;
 			});
 		});
 	}
@@ -931,8 +1010,8 @@ public class SceneFacilityManagement : MonoBehaviour
 
 	public void OpenFacilityCostumeSettingWindow()
 	{
-		SceneFacilityManagement.<OpenFacilityCostumeSettingWindow>c__AnonStoreyF <OpenFacilityCostumeSettingWindow>c__AnonStoreyF = new SceneFacilityManagement.<OpenFacilityCostumeSettingWindow>c__AnonStoreyF();
-		<OpenFacilityCostumeSettingWindow>c__AnonStoreyF.$this = this;
+		SceneFacilityManagement.<OpenFacilityCostumeSettingWindow>c__AnonStorey10 <OpenFacilityCostumeSettingWindow>c__AnonStorey = new SceneFacilityManagement.<OpenFacilityCostumeSettingWindow>c__AnonStorey10();
+		<OpenFacilityCostumeSettingWindow>c__AnonStorey.$this = this;
 		this.nowCost = this.CalcNowCost();
 		this.m_UIFacilityDetails.gameObject.SetActive(false);
 		this.m_UIFacilityPowerUpList.gameObject.SetActive(false);
@@ -951,7 +1030,7 @@ public class SceneFacilityManagement : MonoBehaviour
 		this.m_UIButtonOK.onClick.AddListener(new UnityAction(this.ButtonEvent_OK_OpenMainMenu));
 		this.SetOKButtonEnable(true);
 		Facility[] facilityArray = this.FacilityMgr.GetFacilityArray();
-		<OpenFacilityCostumeSettingWindow>c__AnonStoreyF.enableFacilityArray = new List<Facility>();
+		<OpenFacilityCostumeSettingWindow>c__AnonStorey.enableFacilityArray = new List<Facility>();
 		for (int j = 0; j < facilityArray.Length; j++)
 		{
 			Facility facility = null;
@@ -965,31 +1044,31 @@ public class SceneFacilityManagement : MonoBehaviour
 			}
 			if (facility != null)
 			{
-				<OpenFacilityCostumeSettingWindow>c__AnonStoreyF.enableFacilityArray.Add(facility);
+				<OpenFacilityCostumeSettingWindow>c__AnonStorey.enableFacilityArray.Add(facility);
 			}
 		}
 		uGUIListViewer component = this.m_UIFacilityTypeList.GetComponent<uGUIListViewer>();
-		<OpenFacilityCostumeSettingWindow>c__AnonStoreyF.tempSelectFacility = GameMain.Instance.FacilityMgr.tempSelectFacility;
-		component.Show<Transform>(<OpenFacilityCostumeSettingWindow>c__AnonStoreyF.enableFacilityArray.Count, delegate(int i, Transform trans)
+		<OpenFacilityCostumeSettingWindow>c__AnonStorey.tempSelectFacility = GameMain.Instance.FacilityMgr.tempSelectFacility;
+		component.Show<Transform>(<OpenFacilityCostumeSettingWindow>c__AnonStorey.enableFacilityArray.Count, delegate(int i, Transform trans)
 		{
 			Text componentInChildren = trans.GetComponentInChildren<Text>();
 			Toggle componentInChildren2 = trans.GetComponentInChildren<Toggle>();
-			componentInChildren.text = <OpenFacilityCostumeSettingWindow>c__AnonStoreyF.enableFacilityArray[i].facilityName;
+			componentInChildren.text = <OpenFacilityCostumeSettingWindow>c__AnonStorey.enableFacilityArray[i].facilityName;
 			componentInChildren2.onValueChanged.AddListener(delegate(bool value)
 			{
 				if (!value)
 				{
 					return;
 				}
-				<OpenFacilityCostumeSettingWindow>c__AnonStoreyF.OpenCostumeSettingWindow(<OpenFacilityCostumeSettingWindow>c__AnonStoreyF.enableFacilityArray[i]);
-				if (!<OpenFacilityCostumeSettingWindow>c__AnonStoreyF.m_UIFacilityInfoMiniWindow.gameObject.activeSelf)
+				<OpenFacilityCostumeSettingWindow>c__AnonStorey.OpenCostumeSettingWindow(<OpenFacilityCostumeSettingWindow>c__AnonStorey.enableFacilityArray[i]);
+				if (!<OpenFacilityCostumeSettingWindow>c__AnonStorey.m_UIFacilityInfoMiniWindow.gameObject.activeSelf)
 				{
-					<OpenFacilityCostumeSettingWindow>c__AnonStoreyF.m_UIFacilityInfoMiniWindow.gameObject.SetActive(true);
+					<OpenFacilityCostumeSettingWindow>c__AnonStorey.m_UIFacilityInfoMiniWindow.gameObject.SetActive(true);
 				}
-				<OpenFacilityCostumeSettingWindow>c__AnonStoreyF.m_UIFacilityInfoMiniWindow.SetFacilityInfo(<OpenFacilityCostumeSettingWindow>c__AnonStoreyF.enableFacilityArray[i], true);
-				<OpenFacilityCostumeSettingWindow>c__AnonStoreyF.m_UIFacilityInfoMiniWindow.viewType = FacilityInfoUI.ViewType.DefaultMode;
+				<OpenFacilityCostumeSettingWindow>c__AnonStorey.m_UIFacilityInfoMiniWindow.SetFacilityInfo(<OpenFacilityCostumeSettingWindow>c__AnonStorey.enableFacilityArray[i], true);
+				<OpenFacilityCostumeSettingWindow>c__AnonStorey.m_UIFacilityInfoMiniWindow.viewType = FacilityInfoUI.ViewType.DefaultMode;
 			});
-			if (<OpenFacilityCostumeSettingWindow>c__AnonStoreyF.tempSelectFacility != null && <OpenFacilityCostumeSettingWindow>c__AnonStoreyF.enableFacilityArray[i] == <OpenFacilityCostumeSettingWindow>c__AnonStoreyF.tempSelectFacility)
+			if (<OpenFacilityCostumeSettingWindow>c__AnonStorey.tempSelectFacility != null && <OpenFacilityCostumeSettingWindow>c__AnonStorey.enableFacilityArray[i] == <OpenFacilityCostumeSettingWindow>c__AnonStorey.tempSelectFacility)
 			{
 				componentInChildren2.isOn = true;
 			}

+ 1 - 1
Assembly-CSharp/ScenePresetWindow.cs

@@ -57,7 +57,7 @@ public class ScenePresetWindow : BaseMaidPhotoWindow
 	private void OnClickLoadBtn()
 	{
 		int id = int.Parse(UIButton.current.name);
-		GameMain.Instance.SysDlg.Show("現在の配置情報はリセットされます。\n宜しいですか?", SystemDialog.TYPE.OK_CANCEL, delegate
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm("ScenePhotoMode/シチュ/ダイアログ/現在の配置情報はリセットされます。宜しいですか?", null, SystemDialog.TYPE.OK_CANCEL, delegate
 		{
 			GameMain.Instance.SysDlg.Close();
 			this.Load(id);

+ 49 - 18
Assembly-CSharp/ScheduleCtrl.cs

@@ -1,6 +1,8 @@
 using System;
 using System.Collections.Generic;
 using System.Linq;
+using I2.Loc;
+using MaidStatus;
 using Schedule;
 using UnityEngine;
 
@@ -81,7 +83,6 @@ public class ScheduleCtrl : BaseCreateViewerCtrl
 		this.DicExclusiveViewer.Add(ScheduleCtrl.ExclusiveViewer.Task, childObject);
 		GameObject x = GameObject.Find("__GameMain__/SystemUI Root");
 		NDebug.Assert(x != null, string.Format("{0}が見つかりませんでした。", "UI Root"));
-		ScheduleCtrl.m_readerIcon = Resources.Load<Texture2D>("SceneDaily/Schedule/Texture/cm3d2_management_maidchou");
 		this.m_charSelMgr = UTY.GetChildObject(this.m_goPanel, "CharacterSelectPanel", false).GetComponent<CharacterSelectManager>();
 	}
 
@@ -321,39 +322,62 @@ public class ScheduleCtrl : BaseCreateViewerCtrl
 			component4.text = null;
 		}
 		UILabel component5 = UTY.GetChildObject(childObject, "ContractType/Value", false).GetComponent<UILabel>();
+		if (GameUty.supportMultiLanguage && unit != null)
+		{
+			Vector3 localPosition = component5.transform.localPosition;
+			component5.transform.localPosition = new Vector3(180f, localPosition.y, localPosition.z);
+		}
 		if (unit != null)
 		{
 			component5.text = unit.maidStatus.contractTypeName;
+			Localize component6 = component5.GetComponent<Localize>();
+			if (component6 != null)
+			{
+				bool flag = false;
+				Contract contract = Contract.Trainee;
+				foreach (string value in Enum.GetNames(typeof(Contract)))
+				{
+					Contract contract2 = (Contract)Enum.Parse(typeof(Contract), value);
+					string @string = EnumConvert.GetString(contract2);
+					if (@string == unit.maidStatus.contractTypeName)
+					{
+						contract = contract2;
+						flag = true;
+						break;
+					}
+				}
+				if (flag)
+				{
+					component6.SetTerm(EnumConvert.GetTerm(contract));
+				}
+				else
+				{
+					component6.SetTerm("MaidStatus/契約タイプ/" + unit.maidStatus.contractTypeName);
+				}
+			}
 		}
 		else
 		{
 			component5.text = null;
 		}
-		UITexture component6 = UTY.GetChildObject(maidStatus, "Figure/Icon", false).GetComponent<UITexture>();
+		UITexture component7 = UTY.GetChildObject(maidStatus, "Figure/Icon", false).GetComponent<UITexture>();
 		if (unit != null)
 		{
-			component6.mainTexture = unit.maidStatus.maidIcon;
-			unit.maidStatus.uiMaidIcon = component6;
+			component7.mainTexture = unit.maidStatus.maidIcon;
+			unit.maidStatus.uiMaidIcon = component7;
 		}
 		else
 		{
-			component6.mainTexture = null;
+			component7.mainTexture = null;
 		}
-		UITexture component7 = UTY.GetChildObject(maidStatus, "Status/Reader", false).GetComponent<UITexture>();
+		GameObject childObject2 = UTY.GetChildObject(maidStatus, "Status/Reader", false);
 		if (unit != null)
 		{
-			if (unit.maidStatus.isReader)
-			{
-				component7.mainTexture = ScheduleCtrl.m_readerIcon;
-			}
-			else
-			{
-				component7.mainTexture = null;
-			}
+			childObject2.SetActive(unit.maidStatus.isReader);
 		}
 		else
 		{
-			component7.mainTexture = null;
+			childObject2.SetActive(false);
 		}
 	}
 
@@ -592,7 +616,14 @@ public class ScheduleCtrl : BaseCreateViewerCtrl
 		this.m_scheduleApi = scheduleApi;
 		string maidName = this.GetMaidName(buttonName);
 		this.m_deleteSlotNo = ScheduleCtrl.GetSlotByButtonName(buttonName).slotNo;
-		GameMain.Instance.SysDlg.Show(string.Format("名前:{0}\nスケジュールから削除して\n宜しいですか。", maidName), SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.DeleteMaidAndReDraw), null);
+		if (GameUty.supportMultiLanguage)
+		{
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/スケジュールから削除して宜しいですか。", null, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.DeleteMaidAndReDraw), null);
+		}
+		else
+		{
+			GameMain.Instance.SysDlg.Show(string.Format("名前:{0}\nスケジュールから削除して\n宜しいですか。", maidName), SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.DeleteMaidAndReDraw), null);
+		}
 	}
 
 	private void DeleteMaidAndReDraw()
@@ -716,8 +747,6 @@ public class ScheduleCtrl : BaseCreateViewerCtrl
 
 	private GameObject m_goPanel;
 
-	private static Texture2D m_readerIcon;
-
 	private Color activeColor;
 
 	private Color inActiveColor;
@@ -747,6 +776,8 @@ public class ScheduleCtrl : BaseCreateViewerCtrl
 
 	private const string DIALOG_MESSAGE_TO_DELETE = "名前:{0}\nスケジュールから削除して\n宜しいですか。";
 
+	private const string DIALOG_MESSAGE_TO_DELETE_TERM = "Dialog/スケジュールから削除して宜しいですか。";
+
 	private const string DIALOG_MESSAGE_NOT_SELECTED_MAID = "スケジュールにキャラクターが\n設定されておりません。";
 
 	private string m_deleteSlotNo;

+ 70 - 20
Assembly-CSharp/ScheduleMaidStatusUnit.cs

@@ -1,4 +1,5 @@
 using System;
+using I2.Loc;
 using PlayerStatus;
 using UnityEngine;
 
@@ -89,10 +90,12 @@ public class ScheduleMaidStatusUnit : MonoBehaviour
 	private void Warinig(ScheduleMaidStatusUnit.DataType type)
 	{
 		string text = string.Empty;
+		bool flag = false;
 		switch (type)
 		{
 		case ScheduleMaidStatusUnit.DataType.Yotogi:
 			text = "夜伽がキャンセルされました";
+			flag = true;
 			break;
 		case ScheduleMaidStatusUnit.DataType.Work:
 		{
@@ -109,36 +112,60 @@ public class ScheduleMaidStatusUnit : MonoBehaviour
 			Facility maidAssignedFacility = GameMain.Instance.FacilityMgr.GetMaidAssignedFacility(scheduleSlot, scheduleTime);
 			if (maidAssignedFacility != null)
 			{
-				text = string.Concat(new string[]
+				int facilityIndex = GameMain.Instance.FacilityMgr.GetFacilityIndex(maidAssignedFacility);
+				if (GameUty.supportMultiLanguage)
 				{
-					"ROOM ",
-					GameMain.Instance.FacilityMgr.GetFacilityIndex(maidAssignedFacility).ToString().PadLeft(2, '0'),
-					" 「",
-					maidAssignedFacility.facilityName,
-					"」"
-				});
-				text += "\n稼動に必要なメイドが足りません";
-				string text2 = text;
-				text = string.Concat(new object[]
+					string translation = LocalizationManager.GetTranslation("SceneFacilityManagement/施設名/" + maidAssignedFacility.facilityName, true, 0, true, false, null, null);
+					text = string.Concat(new string[]
+					{
+						"ROOM ",
+						facilityIndex.ToString().PadLeft(2, '0'),
+						" 「",
+						translation,
+						"」\n"
+					});
+					text = text + LocalizationManager.GetTranslation("SceneDaily/稼動に必要なメイドが足りません", true, 0, true, false, null, null) + "\n";
+					text += string.Format(LocalizationManager.GetTranslation("SceneDaily/あと{0}人必要です", true, 0, true, false, null, null), maidAssignedFacility.minMaidCount - maidAssignedFacility.NowMaidCount(scheduleTime));
+				}
+				else
 				{
-					text2,
-					"\nあと",
-					maidAssignedFacility.minMaidCount - maidAssignedFacility.NowMaidCount(scheduleTime),
-					"人必要です"
-				});
+					text = string.Concat(new string[]
+					{
+						"ROOM ",
+						facilityIndex.ToString().PadLeft(2, '0'),
+						" 「",
+						maidAssignedFacility.facilityName,
+						"」"
+					});
+					text += "\n稼動に必要なメイドが足りません";
+					string text2 = text;
+					text = string.Concat(new object[]
+					{
+						text2,
+						"\nあと",
+						maidAssignedFacility.minMaidCount - maidAssignedFacility.NowMaidCount(scheduleTime),
+						"人必要です"
+					});
+				}
 			}
 			break;
 		}
 		case ScheduleMaidStatusUnit.DataType.Facility:
 			text = "施設の強化がキャンセルされました";
+			flag = true;
 			break;
 		case ScheduleMaidStatusUnit.DataType.Trainer:
 			text = "メイド研修を実施しました";
+			flag = true;
 			break;
 		}
 		if (text != string.Empty)
 		{
 			this.wariningLabel.text = text;
+			if (flag)
+			{
+				this.wariningLabel.GetComponent<Localize>().SetTerm("SceneDaily/" + text);
+			}
 			this.wariningLabel.gameObject.SetActive(true);
 		}
 	}
@@ -147,7 +174,7 @@ public class ScheduleMaidStatusUnit : MonoBehaviour
 	{
 		ResultWorkCtrl.UpperMaidStatus maidStatusBySlotNo = this.GetMaidStatusBySlotNo(this.slotNo);
 		this.basicPanel.AddParam("お世話", maidStatusBySlotNo.care, false);
-		this.basicPanel.AddParam("可\u3000", maidStatusBySlotNo.lovely, false);
+		this.basicPanel.AddParam("可\u3000", maidStatusBySlotNo.lovely, false);
 		this.basicPanel.AddParam("料\u3000理", maidStatusBySlotNo.cooking, false);
 		this.basicPanel.AddParam("接\u3000待", maidStatusBySlotNo.reception, false);
 		this.basicPanel.AddParam("気\u3000品", maidStatusBySlotNo.elegance, false);
@@ -163,7 +190,7 @@ public class ScheduleMaidStatusUnit : MonoBehaviour
 	{
 		ResultWorkCtrl.UpperMaidStatus maidStatusBySlotNo = this.GetMaidStatusBySlotNo(this.slotNo);
 		this.traineePanel.AddParam("お世話", maidStatusBySlotNo.care, false);
-		this.traineePanel.AddParam("可\u3000", maidStatusBySlotNo.lovely, false);
+		this.traineePanel.AddParam("可\u3000", maidStatusBySlotNo.lovely, false);
 		this.traineePanel.AddParam("料\u3000理", maidStatusBySlotNo.cooking, false);
 		this.traineePanel.AddParam("接\u3000待", maidStatusBySlotNo.reception, false);
 		this.traineePanel.AddParam("気\u3000品", maidStatusBySlotNo.elegance, false);
@@ -180,7 +207,7 @@ public class ScheduleMaidStatusUnit : MonoBehaviour
 	{
 		ResultWorkCtrl.UpperMaidStatus maidStatusBySlotNo = this.GetMaidStatusBySlotNo(this.slotNo);
 		this.basicPanel.AddParam("お世話", maidStatusBySlotNo.care, false);
-		this.basicPanel.AddParam("可\u3000", maidStatusBySlotNo.lovely, false);
+		this.basicPanel.AddParam("可\u3000", maidStatusBySlotNo.lovely, false);
 		this.basicPanel.AddParam("料\u3000理", maidStatusBySlotNo.cooking, false);
 		this.basicPanel.AddParam("接\u3000待", maidStatusBySlotNo.reception, false);
 		this.basicPanel.AddParam("気\u3000品", maidStatusBySlotNo.elegance, false);
@@ -235,12 +262,17 @@ public class ScheduleMaidStatusUnit : MonoBehaviour
 		label3.text = "RECIPE " + str;
 		UILabel label4 = this.GetLabel(this.facilityPanel, "InfoParent/Recipe");
 		label4.text = recipeData.name;
+		Localize component = label4.GetComponent<Localize>();
+		if (component != null)
+		{
+			component.SetTerm("SceneFacilityManagement/強化種類/" + recipeData.name);
+		}
 		GameObject childObject = UTY.GetChildObject(this.facilityPanel, "Thumbnail", false);
-		UITexture component = childObject.GetComponent<UITexture>();
+		UITexture component2 = childObject.GetComponent<UITexture>();
 		Sprite facilityThumbnail = FacilityDataTable.GetFacilityThumbnail(facility.defaultData.ID, true);
 		if (facilityThumbnail != null)
 		{
-			component.mainTexture = facilityThumbnail.texture;
+			component2.mainTexture = facilityThumbnail.texture;
 		}
 		Facility.FacilityParameter facilityParameter = recipeData.defaultParameter;
 		for (int i = 0; i < facilityParameter.Length; i++)
@@ -347,6 +379,24 @@ public class ScheduleMaidStatusUnit : MonoBehaviour
 			UILabel component = gameObject.GetComponent<UILabel>();
 			UILabel component2 = UTY.GetChildObject(gameObject, "Value", false).GetComponent<UILabel>();
 			component.text = name;
+			Localize component3 = component.GetComponent<Localize>();
+			if (GameUty.supportMultiLanguage && component3 != null)
+			{
+				string text = name.Replace("\u3000", string.Empty);
+				if (text.IndexOf("取得資金") != -1 || text.IndexOf("ジョブメイド経験値") != -1 || text.IndexOf("取得客評価") != -1)
+				{
+					text = "SceneDaily/" + text;
+				}
+				else if (text.IndexOf("収入アップ") != -1 || text.IndexOf("評価アップ") != -1 || text.IndexOf("施設EXPアップ") != -1)
+				{
+					text = "SceneFacilityManagement/パラメータ単/" + text;
+				}
+				else
+				{
+					text = "MaidStatus/" + text;
+				}
+				component3.SetTerm(text);
+			}
 			if (money)
 			{
 				component2.text = "+ " + this.ValueToMoney(value);

+ 5 - 11
Assembly-CSharp/ScheduleTaskViewer.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using I2.Loc;
 using MaidStatus;
 using Schedule;
 using UnityEngine;
@@ -20,18 +21,11 @@ public class ScheduleTaskViewer : MonoBehaviour
 				UnityEngine.Object.Destroy(componentInChildren);
 			}
 			gameObject.name = name;
-			UILabel component = UTY.GetChildObject(gameObject, "Label", false).GetComponent<UILabel>();
+			GameObject childObject = UTY.GetChildObject(gameObject, "Label", false);
+			UILabel component = childObject.GetComponent<UILabel>();
 			component.text = gameObject.name;
-			component.width -= 10;
-			int m = component.width;
-			component.width = 0;
-			component.MakePixelPerfect();
-			while (m < component.width)
-			{
-				component.fontSize--;
-				component.width = 0;
-				component.MakePixelPerfect();
-			}
+			Localize component2 = childObject.GetComponent<Localize>();
+			component2.SetTerm("SceneDaily/スケジュール/カテゴリー/" + name);
 			return UTY.GetChildObject(gameObject, "Button", false).GetComponent<UIButton>();
 		};
 		foreach (KeyValuePair<int, string> keyValuePair in ScheduleCSVData.TaskCategoryNameMap)

+ 46 - 4
Assembly-CSharp/ScriptManager.cs

@@ -14,6 +14,14 @@ using wf;
 
 public class ScriptManager : IDisposable
 {
+	public static bool isGP001Mode
+	{
+		get
+		{
+			return GameMain.Instance.CMSystem.GetTmpGenericFlag("AddAllOffset_Ignore") != 0;
+		}
+	}
+
 	public static string ReplaceCharaName(string text)
 	{
 		if (string.IsNullOrEmpty(text))
@@ -278,6 +286,8 @@ public class ScriptManager : IDisposable
 		this.tjs_.AddFunction("CreateVipCharaList", new TJSScript.FunctionCallBack(this.TJSFuncCreateVipCharaList));
 		this.tjs_.AddFunction("CreateFacilityCharaList", new TJSScript.FunctionCallBack(this.TJSFuncCreateFacilityCharaList));
 		this.tjs_.AddFunction("CreateLifeModeCharaList", new TJSScript.FunctionCallBack(this.TJSFuncCreateLifeModeCharaList));
+		this.tjs_.AddFunction("BackupStoreCharaList", new TJSScript.FunctionCallBack(this.TJSFuncBackupStoreCharaList));
+		this.tjs_.AddFunction("BackupReStoreCharaList", new TJSScript.FunctionCallBack(this.TJSFuncBackupReStoreCharaList));
 		this.tjs_.AddFunction("IsReceptionChara", new TJSScript.FunctionCallBack(this.TJSFuncIsReceptionChara));
 		this.tjs_.AddFunction("SetRandomReceptionChara", new TJSScript.FunctionCallBack(this.TJSFuncSetRandomReceptionChara));
 		this.tjs_.AddFunction("IsSelectChara", new TJSScript.FunctionCallBack(this.TJSFuncIsSelectChara));
@@ -292,6 +302,7 @@ public class ScriptManager : IDisposable
 		this.tjs_.AddFunction("IsYotogiSubCharaSelect", new TJSScript.FunctionCallBack(this.TJSFuncIsYotogiSubCharaSelect));
 		this.tjs_.AddFunction("GetYotogiSkillSpecialType", new TJSScript.FunctionCallBack(this.TJSFuncGetYotogiSkillSpecialType));
 		this.tjs_.AddFunction("IsSelectedYotogiSkill", new TJSScript.FunctionCallBack(this.TJSFuncIsSelectedYotogiSkill));
+		this.tjs_.AddFunction("LearningYotogiSkill", new TJSScript.FunctionCallBack(this.TJSFuncLearningYotogiSkill));
 		this.tjs_.AddFunction("IsExistentFile", new TJSScript.FunctionCallBack(this.TJSFuncIsExistentFile));
 		this.tjs_.AddFunction("IsExistentFileLegacy", new TJSScript.FunctionCallBack(this.TJSFuncIsExistentFileLegacy));
 		this.tjs_.AddFunction("CheckClearVIP", new TJSScript.FunctionCallBack(this.TJSFuncCheckClearVIP));
@@ -342,10 +353,11 @@ public class ScriptManager : IDisposable
 		this.tjs_.AddFunction("IsKasizukiCorrectSenarioFlag", new TJSScript.FunctionCallBack(this.TJSFuncIsKasizukiCorrectSenarioFlag));
 		this.tjs_.AddFunction("IsVRKaraokeMode", new TJSScript.FunctionCallBack(this.TJSFuncIsVRKaraokeMode));
 		this.tjs_.AddFunction("GetRemainingDanceTime", new TJSScript.FunctionCallBack(this.TJSFuncGetRemainingDanceTime));
-		this.tjs.AddFunction("GetYotogiCommandClickCount", new TJSScript.FunctionCallBack(this.TJSFuncGetYotogiCommandClickCount));
-		this.tjs.AddFunction("SetYotogiStage", new TJSScript.FunctionCallBack(this.TJSFuncSetYotogiStage));
+		this.tjs_.AddFunction("GetYotogiCommandClickCount", new TJSScript.FunctionCallBack(this.TJSFuncGetYotogiCommandClickCount));
+		this.tjs_.AddFunction("SetYotogiStage", new TJSScript.FunctionCallBack(this.TJSFuncSetYotogiStage));
 		this.tjs_.AddFunction("GetGameMode", new TJSScript.FunctionCallBack(this.TJSFuncGetGameMode));
 		this.tjs_.AddFunction("IsLifeMode", new TJSScript.FunctionCallBack(this.TJSFuncIsLifeMode));
+		this.tjs_.AddFunction("SetLockNTRPlay", new TJSScript.FunctionCallBack(this.TJSFuncSetLockNTRPlay));
 		MotionKagManager motionKagManager = new MotionKagManager(this.tjs_, this);
 		motionKagManager.Initialize();
 		motionKagManager.SetSloatNo(0);
@@ -536,7 +548,7 @@ public class ScriptManager : IDisposable
 			b = mainMaid.transform.position;
 		}
 		motionKagManager2.Exec();
-		if (mainMaid != null && motionKagManager2.maidOffsetSetList.Find((Maid maid) => maid == mainMaid) != null)
+		if (!ScriptManager.isGP001Mode && mainMaid != null && motionKagManager2.maidOffsetSetList.Find((Maid maid) => maid == mainMaid) != null)
 		{
 			Vector3 b2 = mainMaid.transform.position - b;
 			Quaternion rotation = mainMaid.transform.rotation;
@@ -1804,6 +1816,16 @@ public class ScriptManager : IDisposable
 		SceneCharacterSelect.CreateLifeModeCharaList();
 	}
 
+	private void TJSFuncBackupStoreCharaList(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		SceneCharacterSelect.StoreCharaGuidStockList();
+	}
+
+	private void TJSFuncBackupReStoreCharaList(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		SceneCharacterSelect.ReStoreCharaGuidStockList();
+	}
+
 	private void TJSFuncIsReceptionChara(TJSVariantRef[] tjs_param, TJSVariantRef result)
 	{
 		if (result == null)
@@ -1988,6 +2010,20 @@ public class ScriptManager : IDisposable
 		}
 	}
 
+	private void TJSFuncLearningYotogiSkill(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		NDebug.Assert(tjs_param.Length == 2, "LearningYotogiSkill args count error.");
+		NDebug.Assert(tjs_param[0].type == TJSVariantRef.Type.tvtInteger && tjs_param[1].type == TJSVariantRef.Type.tvtInteger, "error.");
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(tjs_param[0].AsInteger());
+		if (maid == null)
+		{
+			Debug.LogError("maid is null. LearningYotogiSkill");
+			return;
+		}
+		int skillId = tjs_param[1].AsInteger();
+		maid.status.yotogiSkill.Add(skillId);
+	}
+
 	private void TJSFuncIsExistentFile(TJSVariantRef[] tjs_param, TJSVariantRef result)
 	{
 		if (result == null)
@@ -2907,6 +2943,12 @@ public class ScriptManager : IDisposable
 		result.SetBool(GameModeManager.nowGameMode == GameModeManager.Type.LifeMode);
 	}
 
+	public void TJSFuncSetLockNTRPlay(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		NDebug.Assert(tjs_param.Length == 1, "SetLockNTRPlay:引数が1つ必要です");
+		GameMain.Instance.CharacterMgr.status.lockNTRPlay = tjs_param[0].AsBool();
+	}
+
 	public void TJSFuncGetRemainingDanceTime(TJSVariantRef[] tjs_param, TJSVariantRef result)
 	{
 		if (result == null)
@@ -3026,7 +3068,7 @@ public class ScriptManager : IDisposable
 	public void Serialize(BinaryWriter binary)
 	{
 		binary.Write("CM3D2_SCRIPT");
-		binary.Write(1210);
+		binary.Write(1230);
 		this.adv_kag_.Serialize(binary);
 	}
 

+ 27 - 5
Assembly-CSharp/ShopItem.cs

@@ -1,4 +1,5 @@
 using System;
+using I2.Loc;
 using PlayerStatus;
 using UnityEngine;
 using wf;
@@ -42,6 +43,11 @@ public class ShopItem : MonoBehaviour
 		EventDelegate.Add(component.onHoverOver, new EventDelegate.Callback(this.OnHoverOver));
 		EventDelegate.Add(component.onHoverOut, new EventDelegate.Callback(this.OnHoverOut));
 		this.name_label_.text = this.item_data_.name;
+		Localize component2 = this.name_label_.GetComponent<Localize>();
+		if (GameUty.supportMultiLanguage && component2 != null)
+		{
+			component2.SetTerm("SceneShop/" + this.item_data_.id + "/名前");
+		}
 		this.price_label_.text = Utility.ConvertMoneyText(this.item_data_.price);
 		this.LoadIconImage(this.item_data_.icon_file);
 		this.UpdateItemData();
@@ -140,11 +146,16 @@ public class ShopItem : MonoBehaviour
 		long num = GameMain.Instance.CharacterMgr.status.money - (long)this.item_data_.price;
 		if (num < 0L)
 		{
-			GameMain.Instance.SysDlg.Show("資金が不足しています。", SystemDialog.TYPE.OK, null, null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/ショップ/資金が不足しています。", null, SystemDialog.TYPE.OK, null, null);
 			return;
 		}
-		string f_strMsg = this.item_data_.name + "\nを購入しますか?\n資金 -" + Utility.ConvertMoneyText(this.item_data_.price) + "CR";
-		GameMain.Instance.SysDlg.Show(f_strMsg, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.CallOnClickEvent), null);
+		string text = GameUty.supportMultiLanguage ? LocalizationManager.GetTranslation("SceneShop/" + this.item_data_.id + "/名前", true, 0, true, false, null, null) : this.item_data_.name;
+		string[] args = new string[]
+		{
+			text,
+			Utility.ConvertMoneyText(this.item_data_.price)
+		};
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/ショップ/{0}を購入しますか?資金 -{1}CR", args, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.CallOnClickEvent), null);
 	}
 
 	private void CallOnClickEvent()
@@ -153,13 +164,24 @@ public class ShopItem : MonoBehaviour
 		{
 			this.click_event_(this);
 		}
-		GameMain.Instance.SysDlg.Show(this.item_data_.name + "を購入しました", SystemDialog.TYPE.OK, null, null);
+		string text = GameUty.supportMultiLanguage ? LocalizationManager.GetTranslation("SceneShop/" + this.item_data_.id + "/名前", true, 0, true, false, null, null) : this.item_data_.name;
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/ショップ/{0}を購入しました", new string[]
+		{
+			text
+		}, SystemDialog.TYPE.OK, null, null);
 	}
 
 	private void OnHoverOver()
 	{
 		Vector3 position = base.transform.position;
-		this.info_window_.Open(position, this.icon_sprite_.sprite2D.texture, this.item_data_.name, this.item_data_.detail_text, 0);
+		string f_strTitle = this.item_data_.name;
+		string f_strInfo = this.item_data_.detail_text;
+		if (GameUty.supportMultiLanguage)
+		{
+			f_strTitle = LocalizationManager.GetTranslation("SceneShop/" + this.item_data_.id + "/名前", true, 0, true, false, null, null);
+			f_strInfo = LocalizationManager.GetTranslation("SceneShop/" + this.item_data_.id + "/説明", true, 0, true, false, null, null);
+		}
+		this.info_window_.Open(position, this.icon_sprite_.sprite2D.texture, f_strTitle, f_strInfo, 0);
 		Transform transform = UTY.GetChildObject(this.info_window_.gameObject, "Base", false).transform;
 		transform.position = position;
 		float y = transform.localPosition.y;

+ 50 - 1
Assembly-CSharp/StatusCtrl.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using wf;
 
@@ -174,7 +175,43 @@ public class StatusCtrl : MonoBehaviour
 		this.m_lAcquisitionOfClientEvaluation.text = ((status.acquisitionOfClientEvaluation >= 0L) ? status.acquisitionOfClientEvaluation.ToString() : "-");
 		this.m_lAcquisitionOfWorkingFunds.text = ((status.acquisitionOfWorkingFunds >= 0L) ? status.acquisitionOfWorkingFunds.ToString("#,0") : "-");
 		this.m_lDaysOfEmployment.text = status.daysOfEmployment.ToString();
-		UTY.GetChildObject(this.m_goPanel, "DaysOfEmployment/Title", false).GetComponent<UILabel>().text = "雇用日数";
+		if (GameUty.supportMultiLanguage)
+		{
+			Localize component = this.m_lContractType.GetComponent<Localize>();
+			if (component != null)
+			{
+				component.SetTerm(status.contractTypeTerm);
+			}
+			component = this.m_lPersonal.GetComponent<Localize>();
+			if (component != null)
+			{
+				component.SetTerm(status.personalTerm);
+			}
+			component = this.m_lSexualExperience.GetComponent<Localize>();
+			if (component != null)
+			{
+				component.SetTerm(status.sexualExperienceTerm);
+			}
+			component = this.m_lMaidClass.GetComponent<Localize>();
+			if (component != null)
+			{
+				component.SetTerm(status.maidClassNameTerm);
+			}
+			component = this.m_lRelation.GetComponent<Localize>();
+			if (component != null)
+			{
+				component.SetTerm(status.relationTerm);
+			}
+			component = this.m_lConditionText.GetComponent<Localize>();
+			if (component != null)
+			{
+				component.SetTerm(status.conditionTextTerm);
+			}
+		}
+		else
+		{
+			UTY.GetChildObject(this.m_goPanel, "DaysOfEmployment/Title", false).GetComponent<UILabel>().text = "雇用日数";
+		}
 		this.SetCrownIcon(status.ranking);
 	}
 
@@ -398,12 +435,20 @@ public class StatusCtrl : MonoBehaviour
 
 		public string contractType;
 
+		public string contractTypeTerm;
+
 		public string personal;
 
+		public string personalTerm;
+
 		public string sexualExperience;
 
+		public string sexualExperienceTerm;
+
 		public string maidClassName;
 
+		public string maidClassNameTerm;
+
 		public int maidClassLevel;
 
 		public int maidClassExp;
@@ -468,8 +513,12 @@ public class StatusCtrl : MonoBehaviour
 
 		public string relation;
 
+		public string relationTerm;
+
 		public string conditionText;
 
+		public string conditionTextTerm;
+
 		public int yotogiPlayCount;
 
 		public int othersPlayCount;

+ 6 - 0
Assembly-CSharp/StatusMgr.cs

@@ -57,12 +57,16 @@ public class StatusMgr : BaseCreatePanel
 		status.firstName = this.m_maid.status.firstName;
 		status.lastName = this.m_maid.status.lastName;
 		status.contractType = EnumConvert.GetString(this.m_maid.status.contract);
+		status.contractTypeTerm = EnumConvert.GetTerm(this.m_maid.status.contract);
 		status.personal = this.m_maid.status.personal.drawName;
+		status.personalTerm = this.m_maid.status.personal.termName;
 		status.sexualExperience = EnumConvert.GetString(this.m_maid.status.seikeiken);
+		status.sexualExperienceTerm = EnumConvert.GetTerm(this.m_maid.status.seikeiken);
 		ClassData<JobClass.Data> selectedJobClass = this.m_maid.status.selectedJobClass;
 		if (selectedJobClass != null)
 		{
 			status.maidClassName = selectedJobClass.data.drawName;
+			status.maidClassNameTerm = selectedJobClass.data.termName;
 			status.maidClassLevel = selectedJobClass.level;
 			status.maidClassExp = selectedJobClass.cur_exp;
 			status.maidClassRequiredExp = selectedJobClass.next_exp;
@@ -100,6 +104,7 @@ public class StatusMgr : BaseCreatePanel
 		status.hentai = this.m_maid.status.hentai;
 		status.housi = this.m_maid.status.housi;
 		status.relation = EnumConvert.GetString(this.m_maid.status.relation);
+		status.relationTerm = EnumConvert.GetTerm(this.m_maid.status.relation);
 		if (this.m_maid.status.OldStatus != null)
 		{
 			if (this.m_maid.status.OldStatus.isMarriage)
@@ -112,6 +117,7 @@ public class StatusMgr : BaseCreatePanel
 			}
 		}
 		status.conditionText = this.m_maid.status.conditionText;
+		status.conditionTextTerm = this.m_maid.status.conditionTermText;
 		status.yotogiPlayCount = this.m_maid.status.playCountYotogi;
 		status.othersPlayCount = this.m_maid.status.playCountNightWork;
 		status.ranking = this.m_maid.status.popularRank;

+ 12 - 1
Assembly-CSharp/StatusViewer.cs

@@ -117,6 +117,14 @@ public class StatusViewer : MonoBehaviour
 		{
 			this.mainBusinessLabel.text = "-";
 		}
+		if (PluginData.IsEnabled("GP001"))
+		{
+			this.mainBusinessImage.spriteName = GameModeManager.GetData().strBannerImageName;
+		}
+		else
+		{
+			this.mainBusinessImage.spriteName = "main_banner_dammy";
+		}
 	}
 
 	private void OnClickMainBusinessChange()
@@ -133,7 +141,10 @@ public class StatusViewer : MonoBehaviour
 
 	private void OnClickGameModeChange()
 	{
-		this.gameModeChangeWindow.Open(null);
+		this.gameModeChangeWindow.Open(delegate
+		{
+			this.mainBusinessImage.spriteName = GameModeManager.GetData().strBannerImageName;
+		});
 	}
 
 	private void OnInputClubName()

+ 7 - 2
Assembly-CSharp/SystemDialog.cs

@@ -109,9 +109,14 @@ public class SystemDialog : MonoBehaviour
 		this.m_bDecided = false;
 	}
 
-	public void ShowFromLanguageTerm(string messageTerm, SystemDialog.TYPE f_eType, SystemDialog.OnClick f_dgOk = null, SystemDialog.OnClick f_dgCancel = null)
+	public void ShowFromLanguageTerm(string messageTerm, string[] args, SystemDialog.TYPE f_eType, SystemDialog.OnClick f_dgOk = null, SystemDialog.OnClick f_dgCancel = null)
 	{
-		this.Show(LocalizationManager.GetTranslation(messageTerm, true, 0, true, false, null, null), f_eType, f_dgOk, f_dgCancel);
+		string text = LocalizationManager.GetTranslation(messageTerm, true, 0, true, false, null, null);
+		if (!string.IsNullOrEmpty(text) && args != null && 0 < args.Length)
+		{
+			text = string.Format(text, args);
+		}
+		this.Show(text, f_eType, f_dgOk, f_dgCancel);
 	}
 
 	public void UpdateAlpha(float f_fNewValue)

+ 3 - 3
Assembly-CSharp/SystemShortcut.cs

@@ -221,7 +221,7 @@ public class SystemShortcut : MonoBehaviour
 		{
 			return;
 		}
-		GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/終了しますか?", SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.OnToEnd), new SystemDialog.OnClick(this.OnCancel));
+		GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/終了しますか?", null, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.OnToEnd), new SystemDialog.OnClick(this.OnCancel));
 		this.BaseClose();
 	}
 
@@ -277,11 +277,11 @@ public class SystemShortcut : MonoBehaviour
 		}
 		if (Application.loadedLevelName != "SceneTitle")
 		{
-			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/タイトルに戻りますか?", SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.OnToTitle), new SystemDialog.OnClick(this.OnCancel));
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/タイトルに戻りますか?", null, SystemDialog.TYPE.OK_CANCEL, new SystemDialog.OnClick(this.OnToTitle), new SystemDialog.OnClick(this.OnCancel));
 		}
 		else
 		{
-			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/現在タイトルに戻れません。", SystemDialog.TYPE.OK, new SystemDialog.OnClick(this.OnCancel), null);
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/現在タイトルに戻れません。", null, SystemDialog.TYPE.OK, new SystemDialog.OnClick(this.OnCancel), null);
 		}
 		this.BaseClose();
 	}

+ 51 - 2
Assembly-CSharp/TBody.cs

@@ -472,11 +472,16 @@ public class TBody : MonoBehaviour
 
 	public void AddItem(MPN mpn, string slotname, string filename, string AttachSlot, string AttachName, bool f_bTemp)
 	{
+		this.AddItem(mpn, slotname, filename, AttachSlot, AttachName, f_bTemp, 100);
+	}
+
+	public void AddItem(MPN mpn, string slotname, string filename, string AttachSlot, string AttachName, bool f_bTemp, int version)
+	{
 		int num = (int)TBody.hashSlotName[slotname];
 		string bonename = this.m_strSlotName[num * TBody.strSlotNameItemCnt + 1];
 		int layer = 10;
 		TBodySkin tbodySkin = this.goSlot[num];
-		tbodySkin.Load(mpn, this.m_trBones2, this.m_trBones, this.m_dicTrans, bonename, filename, slotname, AttachSlot, layer, f_bTemp);
+		tbodySkin.Load(mpn, this.m_trBones2, this.m_trBones, this.m_dicTrans, bonename, filename, slotname, AttachSlot, layer, f_bTemp, version);
 		tbodySkin.SyojiType = 0;
 		tbodySkin.m_strModelFileName = filename;
 		tbodySkin.RID = Path.GetFileName(filename).ToLower().GetHashCode();
@@ -785,17 +790,61 @@ public class TBody : MonoBehaviour
 			flag = true;
 			this.bonemorph.SCALE_HeadY = f;
 		}
+		if (tag == "EarRot")
+		{
+			this.bonemorph.ROT_Ear = f;
+		}
+		if (tag == "EarScl")
+		{
+			this.bonemorph.SCALE_Ear = f;
+		}
+		if (tag == "NosePos")
+		{
+			this.bonemorph.POS_Nose = f;
+		}
+		if (tag == "NoseScl")
+		{
+			this.bonemorph.SCALE_Nose = f;
+		}
+		if (tag == "MayuX")
+		{
+			this.bonemorph.POS_MayuX = f;
+		}
 		if (tag == "MayuY")
 		{
 			this.bonemorph.POS_MayuY = f;
 		}
+		if (tag == "MayuRot")
+		{
+			this.bonemorph.ROT_Mayu = f;
+		}
 		if (tag == "EyeClose")
 		{
 			this.goSlot[1].morph.m_fEyeCloseRate = f;
 		}
+		if (tag == "EarNone")
+		{
+			this.goSlot[1].morph.m_EarNoneData.rate = (f != 0f);
+		}
+		if (tag == "EarElf")
+		{
+			this.goSlot[1].morph.m_EarElfData.rate = f;
+		}
 		if (tag == "FaceShape")
 		{
-			this.goSlot[1].morph.m_fFaceShapeRate = f;
+			this.goSlot[1].morph.m_FaceShapeData.rate = f;
+		}
+		if (tag == "FaceShapeSlim")
+		{
+			this.goSlot[1].morph.m_FaceShapeSlimData.rate = f;
+		}
+		if (tag == "MayuShapeIn")
+		{
+			this.goSlot[1].morph.m_MayuShapeIn.rate = Mathf.Lerp(-1f, 1f, f);
+		}
+		if (tag == "MayuShapeOut")
+		{
+			this.goSlot[1].morph.m_MayuShapeOut.rate = Mathf.Lerp(-1f, 1f, f);
 		}
 		if (tag == "MuneUpDown")
 		{

+ 17 - 0
Assembly-CSharp/TBodySkin.cs

@@ -29,6 +29,14 @@ public class TBodySkin
 		this.m_listRtMaterial.Add(f_mat);
 	}
 
+	public int PartsVersion
+	{
+		get
+		{
+			return this.m_partsVersion;
+		}
+	}
+
 	public void DeleteObj()
 	{
 		this.m_ParentMPN = MPN.null_mpn;
@@ -81,6 +89,7 @@ public class TBodySkin
 		this.m_ParentMPN = MPN.null_mpn;
 		this.m_mp = null;
 		this.m_bHitFloorY = true;
+		this.m_partsVersion = 0;
 	}
 
 	public void NewParamSet(string A)
@@ -436,7 +445,13 @@ public class TBodySkin
 
 	public void Load(MPN mpn, Transform srcbody, Transform body1, Dictionary<string, Transform> trans, string bonename, string filename, string slotname, string AttachSlot, int layer, bool f_bTemp)
 	{
+		this.Load(mpn, srcbody, body1, trans, bonename, filename, slotname, AttachSlot, layer, f_bTemp, 100);
+	}
+
+	public void Load(MPN mpn, Transform srcbody, Transform body1, Dictionary<string, Transform> trans, string bonename, string filename, string slotname, string AttachSlot, int layer, bool f_bTemp, int version)
+	{
 		this.DeleteObj();
+		this.m_partsVersion = version;
 		if (mpn == MPN.accashi || mpn == MPN.shoes)
 		{
 			this.m_bHitFloorY = false;
@@ -1049,6 +1064,8 @@ public class TBodySkin
 
 	private Animation m_animItem;
 
+	private int m_partsVersion;
+
 	private List<Renderer> m_listRnederTemp = new List<Renderer>(4);
 
 	public class HairLengthCtrl

+ 52 - 11
Assembly-CSharp/TMorph.cs

@@ -136,11 +136,17 @@ public class TMorph
 		}
 		this.BoneCount = this.m_bones.Length;
 		this.initlp(this.tRoot);
-		this.m_fFaceShapeRate = 0f;
-		if (this.hash.ContainsKey("shape"))
-		{
-			this.m_BlendDataIdx_FaceShape = (int)this.hash["shape"];
-		}
+		this.m_EarNoneData.rate = false;
+		this.m_EarNoneData.idx = ((!this.hash.ContainsKey("earnone")) ? -1 : ((int)this.hash["earnone"]));
+		this.m_EarElfData.rate = 0f;
+		this.m_EarElfData.idx = ((!this.hash.ContainsKey("earelf")) ? -1 : ((int)this.hash["earelf"]));
+		this.m_FaceShapeData.rate = 0f;
+		this.m_FaceShapeData.idx = ((!this.hash.ContainsKey("shape")) ? -1 : ((int)this.hash["shape"]));
+		this.m_FaceShapeSlimData.rate = 0f;
+		this.m_FaceShapeSlimData.idx = ((!this.hash.ContainsKey("shapeslim")) ? -1 : ((int)this.hash["shapeslim"]));
+		this.m_MayuShapeIn.rate = (this.m_MayuShapeOut.rate = 0f);
+		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_fEyeCloseRate = 0f;
 		this.BlendDataIdx_EyeClose = new int[10];
 		if (this.hash.ContainsKey("eyeclose"))
@@ -611,9 +617,29 @@ public class TMorph
 				this.BlendValues[this.BlendDataIdx_EyeClose[k]] = this.BlendValuesTemp[this.BlendDataIdx_EyeClose[k]];
 			}
 		}
-		if (this.m_BlendDataIdx_FaceShape != -1)
+		if (this.m_EarNoneData.idx != -1)
+		{
+			this.BlendValues[this.m_EarNoneData.idx] = (float)((!this.m_EarNoneData.rate) ? 0 : 1);
+		}
+		if (this.m_EarElfData.idx != -1 && !this.m_EarNoneData.rate)
+		{
+			this.BlendValues[this.m_EarElfData.idx] = this.m_EarElfData.rate;
+		}
+		if (this.m_FaceShapeData.idx != -1)
+		{
+			this.BlendValues[this.m_FaceShapeData.idx] = this.m_FaceShapeData.rate;
+		}
+		if (this.m_FaceShapeSlimData.idx != -1)
+		{
+			this.BlendValues[this.m_FaceShapeSlimData.idx] = this.m_FaceShapeSlimData.rate;
+		}
+		if (this.m_MayuShapeIn.idx != -1)
 		{
-			this.BlendValues[this.m_BlendDataIdx_FaceShape] = this.m_fFaceShapeRate;
+			this.BlendValues[this.m_MayuShapeIn.idx] = this.m_MayuShapeIn.rate;
+		}
+		if (this.m_MayuShapeOut.idx != -1)
+		{
+			this.BlendValues[this.m_MayuShapeOut.idx] = this.m_MayuShapeOut.rate;
 		}
 		if (this.boLipSync)
 		{
@@ -700,7 +726,7 @@ public class TMorph
 			else
 			{
 				float num6 = this.BlendValues[m];
-				if (num6 >= 0.01f)
+				if (num6 >= 0.01f || m == this.m_MayuShapeIn.idx || m == this.m_MayuShapeOut.idx)
 				{
 					int num7 = this.BlendDatas[m].v_index.Length;
 					for (int n = 0; n < num7; n++)
@@ -779,7 +805,7 @@ public class TMorph
 			else
 			{
 				float num2 = this.BlendValues[j];
-				if (num2 >= 0.01f)
+				if (num2 >= 0.01f || j == this.m_MayuShapeIn.idx || j == this.m_MayuShapeOut.idx)
 				{
 					int num3 = this.BlendDatas[j].v_index.Length;
 					for (int k = 0; k < num3; k++)
@@ -1312,9 +1338,17 @@ public class TMorph
 
 	public float EyeMabataki;
 
-	public int m_BlendDataIdx_FaceShape = -1;
+	public TMorph.IdxRatePair<bool> m_EarNoneData;
+
+	public TMorph.IdxRatePair<float> m_EarElfData;
+
+	public TMorph.IdxRatePair<float> m_FaceShapeData;
+
+	public TMorph.IdxRatePair<float> m_FaceShapeSlimData;
 
-	public float m_fFaceShapeRate;
+	public TMorph.IdxRatePair<float> m_MayuShapeIn;
+
+	public TMorph.IdxRatePair<float> m_MayuShapeOut;
 
 	public int BlendDataIdx_LipSyncTh;
 
@@ -1424,6 +1458,13 @@ public class TMorph
 		Shock = 512
 	}
 
+	public struct IdxRatePair<T> where T : struct
+	{
+		public int idx;
+
+		public T rate;
+	}
+
 	public class TempAttachPos
 	{
 		public int m_nVidx;

+ 17 - 2
Assembly-CSharp/TaskUnit.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections;
 using System.Collections.Generic;
+using I2.Loc;
 using Schedule;
 using UnityEngine;
 
@@ -23,6 +24,7 @@ public class TaskUnit : MonoBehaviour
 		this.Button = this.Icon.GetComponent<UIButton>();
 		this.SelectCursor = UTY.GetChildObject(base.gameObject, "Main/SelectCursor", false).GetComponent<UISprite>();
 		this.TitleLabel = UTY.GetChildObject(base.gameObject, "Title", false).GetComponent<UILabel>();
+		this.TitleLocalize = this.TitleLabel.GetComponent<Localize>();
 		this.AddOnClickEvent();
 		this.onHoverOverEvent = new Action<ScheduleCSVData.ScheduleBase>(this.viewer.onHoverOverEvent);
 		this.onHoverOutEvent = new Action<ScheduleCSVData.ScheduleBase>(this.viewer.onHoverOutEvent);
@@ -61,6 +63,14 @@ public class TaskUnit : MonoBehaviour
 		this.taskName = this.schedule.name;
 		this.SelectCursor.alpha = 0f;
 		this.TitleLabel.text = this.schedule.name;
+		if (LocalizationManager.GetTermData("SceneFacilityManagement/施設名/" + this.schedule.name) != null)
+		{
+			this.TitleLocalize.SetTerm("SceneFacilityManagement/施設名/" + this.schedule.name);
+		}
+		else
+		{
+			this.TitleLocalize.SetTerm("SceneDaily/スケジュール/項目/" + this.schedule.name);
+		}
 		this.Icon.mainTexture = viewer.TmpData(taskType).icons[this.schedule.icon];
 	}
 
@@ -205,7 +215,10 @@ public class TaskUnit : MonoBehaviour
 		UTY.GetChildObject(obj, "ExpRatio", false).SetActive(active);
 		Transform transform = UTY.GetChildObject(obj, "Title", false).transform;
 		Vector3 localPosition = transform.localPosition;
-		localPosition.y = -27f;
+		if (!GameUty.supportMultiLanguage)
+		{
+			localPosition.y = -27f;
+		}
 		if (this.taskType == ScheduleTaskCtrl.TaskType.Training)
 		{
 			ScheduleTaskCtrl.TrainingTaskButton trainingTaskButton = (ScheduleTaskCtrl.TrainingTaskButton)taskButton;
@@ -216,7 +229,7 @@ public class TaskUnit : MonoBehaviour
 		}
 		if (this.taskType == ScheduleTaskCtrl.TaskType.Work && ScheduleCSVData.faclilityPowerUpWorkId == this.schedule.id)
 		{
-			localPosition.y = -51f;
+			localPosition.y = (float)(GameUty.supportMultiLanguage ? -35 : -51);
 		}
 		transform.localPosition = localPosition;
 	}
@@ -245,6 +258,8 @@ public class TaskUnit : MonoBehaviour
 
 	public UILabel TitleLabel;
 
+	public Localize TitleLocalize;
+
 	public ScheduleTaskCtrl.TaskType taskType;
 
 	protected Color backup_default_color_ = new Color(1f, 1f, 1f, 0.6f);

+ 0 - 11
Assembly-CSharp/UICamera.cs

@@ -1404,17 +1404,6 @@ public class UICamera : MonoBehaviour
 				num2 += UICamera.GetDirection(KeyCode.D, KeyCode.RightArrow, KeyCode.A, KeyCode.LeftArrow);
 			}
 		}
-		if (this.useController)
-		{
-			if (!string.IsNullOrEmpty(this.verticalAxisName))
-			{
-				num += UICamera.GetDirection(this.verticalAxisName);
-			}
-			if (!string.IsNullOrEmpty(this.horizontalAxisName))
-			{
-				num2 += UICamera.GetDirection(this.horizontalAxisName);
-			}
-		}
 		if (num != 0)
 		{
 			UICamera.currentScheme = UICamera.ControlScheme.Controller;

+ 18 - 1
Assembly-CSharp/UILabel.cs

@@ -1454,12 +1454,29 @@ public class UILabel : UIWidget
 		{
 			if (UIPopupList.current.isLocalized)
 			{
+				List<string> itemTerms = UIPopupList.current.itemTerms;
+				List<string> items = UIPopupList.current.items;
 				Localize localize = base.gameObject.GetComponent<Localize>();
 				if (localize == null)
 				{
 					localize = base.gameObject.AddComponent<Localize>();
 				}
-				localize.SetTerm(UIPopupList.current.value.Replace("\r", string.Empty));
+				string term = UIPopupList.current.value.Replace("\r", string.Empty);
+				if (itemTerms != null && itemTerms.Count == items.Count)
+				{
+					for (int i = 0; i < items.Count; i++)
+					{
+						if (items[i] == UIPopupList.current.value)
+						{
+							if (!string.IsNullOrEmpty(itemTerms[i]))
+							{
+								term = itemTerms[i];
+							}
+							break;
+						}
+					}
+				}
+				localize.SetTerm(term);
 			}
 			else
 			{

+ 26 - 12
Assembly-CSharp/UIPopupList.cs

@@ -615,15 +615,27 @@ public class UIPopupList : UIWidgetContainer
 				uilabel.fontSize = this.fontSize;
 				uilabel.fontStyle = this.fontStyle;
 				uilabel.text = text;
-				if (this.isLocalized)
-				{
-					uilabel.gameObject.AddComponent<Localize>().SetTerm(text.Replace("\r", string.Empty));
-				}
 				uilabel.color = this.textColor;
 				uilabel.cachedTransform.localPosition = new Vector3(border.x + this.padding.x - uilabel.pivotOffset.x, num5, -1f);
 				uilabel.overflowMethod = UILabel.Overflow.ResizeFreely;
 				uilabel.alignment = this.alignment;
 				list.Add(uilabel);
+				if (this.isLocalized)
+				{
+					string term = text.Replace("\r", string.Empty);
+					if (this.itemTerms != null && this.itemTerms.Count == this.items.Count && !string.IsNullOrEmpty(this.itemTerms[i]))
+					{
+						term = this.itemTerms[i];
+					}
+					Localize localize = uilabel.gameObject.AddComponent<Localize>();
+					localize.ForceOverFlowShrink = false;
+					localize.SetTerm(term);
+					NGUILabelLocalizeSupport component = uilabel.gameObject.GetComponent<NGUILabelLocalizeSupport>();
+					if (component != null)
+					{
+						component.overRidePropertys.overFlow.value = UILabel.Overflow.ResizeFreely;
+					}
+				}
 				num5 -= num3;
 				num5 -= this.padding.y;
 				num4 = Mathf.Max(num4, uilabel.printedSize.x);
@@ -650,18 +662,18 @@ public class UIPopupList : UIWidgetContainer
 				UILabel uilabel2 = list[j];
 				NGUITools.AddWidgetCollider(uilabel2.gameObject);
 				uilabel2.autoResizeBoxCollider = false;
-				BoxCollider component = uilabel2.GetComponent<BoxCollider>();
-				if (component != null)
+				BoxCollider component2 = uilabel2.GetComponent<BoxCollider>();
+				if (component2 != null)
 				{
-					vector3.z = component.center.z;
-					component.center = vector3;
-					component.size = vector4;
+					vector3.z = component2.center.z;
+					component2.center = vector3;
+					component2.size = vector4;
 				}
 				else
 				{
-					BoxCollider2D component2 = uilabel2.GetComponent<BoxCollider2D>();
-					component2.offset = vector3;
-					component2.size = vector4;
+					BoxCollider2D component3 = uilabel2.GetComponent<BoxCollider2D>();
+					component3.offset = vector3;
+					component3.size = vector4;
 				}
 				j++;
 			}
@@ -748,6 +760,8 @@ public class UIPopupList : UIWidgetContainer
 
 	public List<string> items = new List<string>();
 
+	public List<string> itemTerms = new List<string>();
+
 	public List<object> itemData = new List<object>();
 
 	public Vector2 padding = new Vector3(4f, 4f);

+ 109 - 12
Assembly-CSharp/UIWFConditionList.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using wf;
 
@@ -17,12 +18,15 @@ public class UIWFConditionList : MonoBehaviour
 			return;
 		}
 		this.condition_label_list_ = new List<UILabel>();
+		this.condition_label_localize_list_ = new List<Localize>();
 		UITable component = base.GetComponent<UITable>();
 		List<Transform> childList = component.GetChildList();
 		foreach (Transform transform in childList)
 		{
 			UILabel component2 = UTY.GetChildObject(transform.gameObject, "Message", false).GetComponent<UILabel>();
+			component2.overflowMethod = UILabel.Overflow.ShrinkContent;
 			this.condition_label_list_.Add(component2);
+			this.condition_label_localize_list_.Add(component2.GetComponent<Localize>());
 			this.defaultFontSize = component2.fontSize;
 			this.widthMargin = (int)(component2.transform.localPosition.x - (float)(UTY.GetChildObject(transform.gameObject, "No", false).GetComponent<UIWidget>().width / -2));
 			transform.gameObject.SetActive(false);
@@ -31,25 +35,33 @@ public class UIWFConditionList : MonoBehaviour
 
 	public void SetTexts(string[] texts, int limitTextWidth = -1)
 	{
-		KeyValuePair<string, Color>[] array = new KeyValuePair<string, Color>[texts.Length];
+		KeyValuePair<string[], Color>[] array = new KeyValuePair<string[], Color>[texts.Length];
 		for (int i = 0; i < texts.Length; i++)
 		{
-			array[i] = new KeyValuePair<string, Color>(texts[i], Color.white);
+			array[i] = new KeyValuePair<string[], Color>(new string[]
+			{
+				texts[i]
+			}, Color.white);
 		}
 		this.SetTexts(array, limitTextWidth);
 	}
 
-	public void SetTexts(KeyValuePair<string, Color>[] texts, int limitTextWidth = -1)
+	public void SetTexts(KeyValuePair<string[], Color>[] texts, int limitTextWidth = -1)
 	{
 		if (this.condition_label_list_ == null)
 		{
 			this.Awake();
 		}
-		this.width = 0;
+		this.lastLimitTextWidth = limitTextWidth;
 		float num = 0f;
 		float num2 = 0f;
+		Localize localize = null;
 		for (int i = 0; i < this.condition_label_list_.Count; i++)
 		{
+			if (this.condition_label_localize_list_[i] != null)
+			{
+				this.condition_label_localize_list_[i].LocalizeEvent.RemoveAllListeners();
+			}
 			if (i < texts.Length)
 			{
 				Transform parent = this.condition_label_list_[i].transform.parent;
@@ -58,16 +70,45 @@ public class UIWFConditionList : MonoBehaviour
 					num = Mathf.Abs(parent.localPosition.y);
 				}
 				this.condition_label_list_[i].transform.parent.gameObject.SetActive(true);
-				this.condition_label_list_[i].text = texts[i].Key;
-				this.condition_label_list_[i].color = texts[i].Value;
-				this.condition_label_list_[i].fontSize = this.defaultFontSize;
-				this.condition_label_list_[i].width = 0;
-				this.condition_label_list_[i].MakePixelPerfect();
-				if (0 <= limitTextWidth)
+				if (texts[i].Key.Length == 1)
 				{
-					Utility.ResizeUILabelFontSize(this.condition_label_list_[i], limitTextWidth);
+					if (!GameUty.supportMultiLanguage || this.condition_label_localize_list_[i] == null)
+					{
+						this.condition_label_list_[i].text = Utility.GetTermLastWord(texts[i].Key[0]);
+					}
+					else
+					{
+						this.condition_label_localize_list_[i].TermArgs = null;
+						this.condition_label_localize_list_[i].SetTerm(string.Empty);
+						this.condition_label_localize_list_[i].SetTerm(texts[i].Key[0]);
+					}
 				}
-				this.width = Mathf.Max(this.width, this.condition_label_list_[i].width);
+				else if (!GameUty.supportMultiLanguage || this.condition_label_localize_list_[i] == null)
+				{
+					string[] array = new string[texts[i].Key.Length - 1];
+					for (int j = 1; j < texts[i].Key.Length; j++)
+					{
+						array[j - 1] = Utility.GetTermLastWord(texts[i].Key[j]);
+					}
+					this.condition_label_list_[i].text = string.Format(Utility.GetTermLastWord(texts[i].Key[0]), array);
+				}
+				else
+				{
+					bool setIsTerm = false;
+					if (texts[i].Key[0].Contains("性経験") || texts[i].Key[0].Contains("契約タイプ") || texts[i].Key[0].Contains("性癖") || texts[i].Key[0].Contains("ヒロインタイプ"))
+					{
+						setIsTerm = true;
+					}
+					Localize.ArgsPair[] array2 = new Localize.ArgsPair[texts[i].Key.Length - 1];
+					for (int k = 1; k < texts[i].Key.Length; k++)
+					{
+						array2[k - 1] = Localize.ArgsPair.Create(texts[i].Key[k], setIsTerm);
+					}
+					this.condition_label_localize_list_[i].TermArgs = array2;
+					this.condition_label_localize_list_[i].SetTerm(texts[i].Key[0]);
+					localize = this.condition_label_localize_list_[i];
+				}
+				this.condition_label_list_[i].color = texts[i].Value;
 				num2 = Mathf.Abs(parent.localPosition.y) + (float)parent.gameObject.GetComponent<UIWidget>().height;
 			}
 			else
@@ -76,12 +117,68 @@ public class UIWFConditionList : MonoBehaviour
 			}
 		}
 		this.height = (int)(num2 - num);
+		this.ResizeUI(limitTextWidth);
+		if (localize != null)
+		{
+			localize.LocalizeEvent.AddListener(delegate()
+			{
+				this.updateFlag = true;
+			});
+		}
+	}
+
+	private void Update()
+	{
+		if (!this.updateFlag)
+		{
+			return;
+		}
+		this.ResizeUI(this.lastLimitTextWidth);
+		this.updateFlag = false;
+	}
+
+	public void ResizeUI(int limitTextWidth = -1)
+	{
+		this.width = 0;
+		for (int i = 0; i < this.condition_label_list_.Count; i++)
+		{
+			if (this.condition_label_list_[i].transform.parent.gameObject.activeSelf)
+			{
+				if (limitTextWidth != -1)
+				{
+					this.condition_label_list_[i].width = limitTextWidth;
+				}
+				else
+				{
+					this.condition_label_list_[i].fontSize = this.defaultFontSize;
+					this.condition_label_list_[i].width = 0;
+					this.condition_label_list_[i].MakePixelPerfect();
+					if (0 <= limitTextWidth)
+					{
+						Utility.ResizeUILabelFontSize(this.condition_label_list_[i], limitTextWidth);
+					}
+					this.width = Mathf.Max(this.width, this.condition_label_list_[i].width);
+				}
+			}
+		}
 		this.width += this.widthMargin;
+		if (this.resizeUIEvent != null && this.resizeUIEvent.Count >= 1)
+		{
+			EventDelegate.Execute(this.resizeUIEvent);
+		}
 	}
 
 	private int widthMargin;
 
+	public List<EventDelegate> resizeUIEvent = new List<EventDelegate>();
+
+	private int lastLimitTextWidth = -1;
+
+	private bool updateFlag;
+
 	private List<UILabel> condition_label_list_;
 
+	private List<Localize> condition_label_localize_list_;
+
 	private int defaultFontSize;
 }

+ 107 - 0
Assembly-CSharp/UIWidgetlLocalizeSupport.cs

@@ -0,0 +1,107 @@
+using System;
+using I2.Loc;
+using UnityEngine;
+
+[DisallowMultipleComponent]
+[RequireComponent(typeof(UIWidget))]
+public class UIWidgetlLocalizeSupport : MonoBehaviour
+{
+	private void Awake()
+	{
+		if (this.callAwake)
+		{
+			return;
+		}
+		this.callAwake = true;
+		this.widget = base.GetComponent<UIWidget>();
+		if (this.widget != null)
+		{
+			this.holdWidth = this.widget.width;
+			this.holdHeight = this.widget.height;
+			LocalizationManager.OnLocalizeEvent -= this.OnLocalize;
+			LocalizationManager.OnLocalizeEvent += this.OnLocalize;
+			this.OnLocalize();
+		}
+	}
+
+	public void OnDestroy()
+	{
+		LocalizationManager.OnLocalizeEvent -= this.OnLocalize;
+	}
+
+	public void OnLocalize()
+	{
+		if (!this.callAwake)
+		{
+			this.Awake();
+		}
+		if (LocalizationManager.CurrentLanguageCode == "ja")
+		{
+			this.widget.width = this.holdWidth;
+			this.widget.height = this.holdHeight;
+		}
+		else
+		{
+			this.Apply(this.overRidePropertys);
+			if (this.languageOverRidePropertys != null)
+			{
+				foreach (UIWidgetlLocalizeSupport.LanguageOverRideProperty languageOverRideProperty in this.languageOverRidePropertys)
+				{
+					if (languageOverRideProperty.LanguageCode == LocalizationManager.CurrentLanguageCode)
+					{
+						this.Apply(languageOverRideProperty.Property);
+						break;
+					}
+				}
+			}
+		}
+	}
+
+	public void Apply(UIWidgetlLocalizeSupport.OverRideProperty property)
+	{
+		if (!this.callAwake)
+		{
+			this.Awake();
+		}
+		this.widget.width = ((!property.width.enabled) ? this.holdWidth : property.width.value);
+		this.widget.height = ((!property.height.enabled) ? this.holdHeight : property.height.value);
+	}
+
+	[SerializeField]
+	public UIWidgetlLocalizeSupport.OverRideProperty overRidePropertys = default(UIWidgetlLocalizeSupport.OverRideProperty);
+
+	[SerializeField]
+	public UIWidgetlLocalizeSupport.LanguageOverRideProperty[] languageOverRidePropertys;
+
+	private int holdWidth;
+
+	private int holdHeight;
+
+	private UIWidget widget;
+
+	private bool callAwake;
+
+	[Serializable]
+	public struct OverRideProperty
+	{
+		public UIWidgetlLocalizeSupport.OverRideProperty.IntValue width;
+
+		public UIWidgetlLocalizeSupport.OverRideProperty.IntValue height;
+
+		[Serializable]
+		public struct IntValue
+		{
+			public bool enabled;
+
+			public int value;
+		}
+	}
+
+	[Serializable]
+	public struct LanguageOverRideProperty
+	{
+		public string LanguageCode;
+
+		public UIWidgetlLocalizeSupport.OverRideProperty Property;
+	}
+}

+ 12 - 5
Assembly-CSharp/UndressingWindow.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using I2.Loc;
 using UnityEngine;
 using wf;
 
@@ -22,11 +23,17 @@ public class UndressingWindow : BaseMaidPhotoWindow
 					{
 						GameObject gameObject = Utility.CreatePrefab(this.Grid.gameObject, "ScenePhotoMode/WindowListItemNormalButton", true);
 						gameObject.name = csvParser.GetCellAsString(0, i);
-						gameObject.GetComponentInChildren<UILabel>().text = gameObject.name;
-						UIButton componentInChildren = gameObject.GetComponentInChildren<UIButton>();
-						componentInChildren.defaultColor = Color.white;
-						componentInChildren.disabledColor = new Color(0.15f, 0.15f, 0.15f);
-						this.unit_dic_.Add(gameObject.name, componentInChildren);
+						UILabel componentInChildren = gameObject.GetComponentInChildren<UILabel>();
+						Localize component = componentInChildren.GetComponent<Localize>();
+						componentInChildren.text = gameObject.name;
+						if (component != null)
+						{
+							component.SetTerm("ScenePhotoMode/脱衣設定/項目/" + gameObject.name);
+						}
+						UIButton componentInChildren2 = gameObject.GetComponentInChildren<UIButton>();
+						componentInChildren2.defaultColor = Color.white;
+						componentInChildren2.disabledColor = new Color(0.15f, 0.15f, 0.15f);
+						this.unit_dic_.Add(gameObject.name, componentInChildren2);
 					}
 				}
 			}

+ 3 - 6
Assembly-CSharp/UnityEngine/EventSystems/StandaloneInputModule2.cs

@@ -150,13 +150,10 @@ namespace UnityEngine.EventSystems
 		public override void ActivateModule()
 		{
 			base.ActivateModule();
-			if (GameMain.Instance.VRMode)
+			this.m_InputOverride = base.GetComponent<BaseInput2>();
+			if (this.m_InputOverride == null)
 			{
-				this.m_InputOverride = base.GetComponent<BaseInput2>();
-				if (this.m_InputOverride == null)
-				{
-					this.m_InputOverride = base.gameObject.AddComponent<BaseInput2>();
-				}
+				this.m_InputOverride = base.gameObject.AddComponent<BaseInput2>();
 			}
 			this.m_MousePosition = base.input.mousePosition;
 			this.m_LastMousePosition = this.m_MousePosition;

+ 192 - 0
Assembly-CSharp/VRFaceShortcutConfig.cs

@@ -42,6 +42,7 @@ public class VRFaceShortcutConfig : MonoBehaviour
 	{
 		this.CacheItemTemplate<VRFaceShortcutConfig.ItemSlider>("temp slider");
 		this.CacheItemTemplate<VRFaceShortcutConfig.ItemSelectButton>("temp select");
+		this.CacheItemTemplate<VRFaceShortcutConfig.ParentMultiButton>("temp multi select");
 		this.CreateDefaultItems();
 		this.CreateViveItems();
 		NGUIWindow fadeWindowThis = this.m_FadeWindowThis;
@@ -134,6 +135,39 @@ public class VRFaceShortcutConfig : MonoBehaviour
 		{
 			ControllerShortcutSettingData.config.selfCameraFOV = value;
 		};
+		VRFaceShortcutConfig.ParentMultiButton parentMultiButton = this.CreateItem<VRFaceShortcutConfig.ParentMultiButton>("手のスカートへの当たり判定\n※VR CONFIGより優先されます。");
+		parentMultiButton.textRight.text = "OFF";
+		parentMultiButton.textLeft.text = "常時ON";
+		parentMultiButton.textCenter.text = "握時ON";
+		if (GameMain.Instance.CMSystem.SConfig.OvrHandHitToSkirtVAS == CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.OFF)
+		{
+			parentMultiButton.Set(0);
+		}
+		else if (GameMain.Instance.CMSystem.SConfig.OvrHandHitToSkirtVAS == CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.ON)
+		{
+			parentMultiButton.Set(1);
+		}
+		else
+		{
+			parentMultiButton.Set(2);
+		}
+		parentMultiButton.onClick = delegate(int index)
+		{
+			CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT ovrHandHitToSkirtVAS;
+			if (index == 0)
+			{
+				ovrHandHitToSkirtVAS = CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.OFF;
+			}
+			else if (index == 1)
+			{
+				ovrHandHitToSkirtVAS = CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.ON;
+			}
+			else
+			{
+				ovrHandHitToSkirtVAS = CMSystem.SerializeConfig.OVR_HAND_TO_SKIRT.GRAB;
+			}
+			GameMain.Instance.CMSystem.SConfig.OvrHandHitToSkirtVAS = ovrHandHitToSkirtVAS;
+		};
 	}
 
 	private void CreateViveItems()
@@ -467,4 +501,162 @@ public class VRFaceShortcutConfig : MonoBehaviour
 
 		private UILabel m_TextLeft;
 	}
+
+	private class ParentMultiButton : VRFaceShortcutConfig.Item
+	{
+		public UIButton buttonRight
+		{
+			get
+			{
+				return this.m_ButtonRight;
+			}
+			private set
+			{
+				this.m_ButtonRight = value;
+			}
+		}
+
+		public UIButton buttonLeft
+		{
+			get
+			{
+				return this.m_ButtonLeft;
+			}
+			private set
+			{
+				this.m_ButtonLeft = value;
+			}
+		}
+
+		public UIButton buttonCenter
+		{
+			get
+			{
+				return this.m_ButtonCenter;
+			}
+			private set
+			{
+				this.m_ButtonCenter = value;
+			}
+		}
+
+		public UILabel textRight
+		{
+			get
+			{
+				return this.m_TextRight;
+			}
+			private set
+			{
+				this.m_TextRight = value;
+			}
+		}
+
+		public UILabel textLeft
+		{
+			get
+			{
+				return this.m_TextLeft;
+			}
+			private set
+			{
+				this.m_TextLeft = value;
+			}
+		}
+
+		public UILabel textCenter
+		{
+			get
+			{
+				return this.m_TextCenter;
+			}
+			private set
+			{
+				this.m_TextCenter = value;
+			}
+		}
+
+		public Action<int> onClick { get; set; }
+
+		protected override void Awake()
+		{
+			base.Awake();
+			this.buttonRight = VRFaceShortcutConfig.GetChildObject<UIButton>(base.gameObject, "button right");
+			this.buttonLeft = VRFaceShortcutConfig.GetChildObject<UIButton>(base.gameObject, "button left");
+			this.buttonCenter = VRFaceShortcutConfig.GetChildObject<UIButton>(base.gameObject, "button center");
+			this.textRight = this.buttonRight.GetComponentInChildren<UILabel>();
+			this.textLeft = this.buttonLeft.GetComponentInChildren<UILabel>();
+			this.textCenter = this.buttonCenter.GetComponentInChildren<UILabel>();
+			EventDelegate.Add(this.buttonRight.onClick, delegate()
+			{
+				if (this.onClick != null)
+				{
+					this.onClick(0);
+				}
+				this.OnClickButton(0);
+			});
+			EventDelegate.Add(this.buttonLeft.onClick, delegate()
+			{
+				if (this.onClick != null)
+				{
+					this.onClick(1);
+				}
+				this.OnClickButton(1);
+			});
+			EventDelegate.Add(this.buttonCenter.onClick, delegate()
+			{
+				if (this.onClick != null)
+				{
+					this.onClick(2);
+				}
+				this.OnClickButton(2);
+			});
+		}
+
+		private void OnClickButton(int index)
+		{
+			this.buttonRight.defaultColor = ((index != 0) ? VRFaceShortcutConfig.ParentMultiButton.ButtonDefaultColor : VRFaceShortcutConfig.ParentMultiButton.ButtonClickedColor);
+			this.buttonLeft.defaultColor = ((index != 1) ? VRFaceShortcutConfig.ParentMultiButton.ButtonDefaultColor : VRFaceShortcutConfig.ParentMultiButton.ButtonClickedColor);
+			this.buttonCenter.defaultColor = ((index != 2) ? VRFaceShortcutConfig.ParentMultiButton.ButtonDefaultColor : VRFaceShortcutConfig.ParentMultiButton.ButtonClickedColor);
+		}
+
+		public void Emulate(int index)
+		{
+			UIButton uibutton;
+			if (index == 0)
+			{
+				uibutton = this.buttonRight;
+			}
+			else if (index == 1)
+			{
+				uibutton = this.buttonLeft;
+			}
+			else
+			{
+				uibutton = this.buttonCenter;
+			}
+			EventDelegate.Execute(uibutton.onClick);
+		}
+
+		public override void Set(object value)
+		{
+			this.Emulate((int)value);
+		}
+
+		private static Color ButtonDefaultColor = new Color(1f, 1f, 1f, 0.5f);
+
+		private static Color ButtonClickedColor = Color.white;
+
+		private UIButton m_ButtonRight;
+
+		private UIButton m_ButtonLeft;
+
+		private UIButton m_ButtonCenter;
+
+		private UILabel m_TextRight;
+
+		private UILabel m_TextLeft;
+
+		private UILabel m_TextCenter;
+	}
 }

+ 5 - 5
Assembly-CSharp/WindowPartsFingerPreset.cs

@@ -19,7 +19,7 @@ public class WindowPartsFingerPreset : MonoBehaviour
 		{
 			EventDelegate.Add(this.RightCopyToLeft.onClick, new EventDelegate.Callback(this.OnClickRightCopyToLeft));
 			EventDelegate eventDelegate = new EventDelegate(this, "OnBtnMouseHoverIn");
-			eventDelegate.parameters[0].value = "左へコピー";
+			eventDelegate.parameters[0].value = "ScenePhotoMode/Pエディット/左へコピー";
 			this.RightCopyToLeft.gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate);
 			EventDelegate.Add(this.RightCopyToLeft.gameObject.GetComponent<UIEventTrigger>().onHoverOut, new EventDelegate.Callback(this.OnMouseHoverOut));
 		}
@@ -27,7 +27,7 @@ public class WindowPartsFingerPreset : MonoBehaviour
 		{
 			EventDelegate.Add(this.LeftCopyToRight.onClick, new EventDelegate.Callback(this.OnClickLeftCopyToLeft));
 			EventDelegate eventDelegate2 = new EventDelegate(this, "OnBtnMouseHoverIn");
-			eventDelegate2.parameters[0].value = "右へコピー";
+			eventDelegate2.parameters[0].value = "ScenePhotoMode/Pエディット/右へコピー";
 			this.LeftCopyToRight.gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate2);
 			EventDelegate.Add(this.LeftCopyToRight.gameObject.GetComponent<UIEventTrigger>().onHoverOut, new EventDelegate.Callback(this.OnMouseHoverOut));
 		}
@@ -35,7 +35,7 @@ public class WindowPartsFingerPreset : MonoBehaviour
 		{
 			EventDelegate.Add(this.Swap.onClick, new EventDelegate.Callback(this.OnClickSwap));
 			EventDelegate eventDelegate3 = new EventDelegate(this, "OnBtnMouseHoverIn");
-			eventDelegate3.parameters[0].value = "交換";
+			eventDelegate3.parameters[0].value = "ScenePhotoMode/Pエディット/交換";
 			this.Swap.gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate3);
 			EventDelegate.Add(this.Swap.gameObject.GetComponent<UIEventTrigger>().onHoverOut, new EventDelegate.Callback(this.OnMouseHoverOut));
 		}
@@ -182,7 +182,7 @@ public class WindowPartsFingerPreset : MonoBehaviour
 	{
 		WindowPartsFingerBlend.Type blendType = tareget_blend.BlendType;
 		FingerBlend.BaseFinger baseFingerClass = tareget_blend.GetBaseFingerClass(tareget_blend.mgr.select_maid, blendType);
-		XElement xelement = new XElement("GameVersion", 1210);
+		XElement xelement = new XElement("GameVersion", 1230);
 		XElement xelement2 = new XElement("RightData", blendType == WindowPartsFingerBlend.Type.RightArm || blendType == WindowPartsFingerBlend.Type.RightLeg);
 		XElement xelement3 = new XElement("BinaryData", Convert.ToBase64String(baseFingerClass.GetBinary()));
 		XNode[] contents = new XNode[]
@@ -208,7 +208,7 @@ public class WindowPartsFingerPreset : MonoBehaviour
 	private void OnBtnMouseHoverIn(string text)
 	{
 		MouseExposition @object = MouseExposition.GetObject();
-		@object.text = text;
+		@object.textFromLanguageTerm = text;
 	}
 
 	private void OnMouseHoverOut()

+ 4 - 4
Assembly-CSharp/WindowPartsInputColorrPalette.cs

@@ -20,7 +20,7 @@ public class WindowPartsInputColorrPalette : MonoBehaviour
 			this.btn_list_.Add(this.ResetBtn);
 			EventDelegate.Add(this.btn_list_[this.btn_list_.Count - 1].onClick, new EventDelegate.Callback(this.OnReset));
 			EventDelegate eventDelegate = new EventDelegate(this, "OnMouseHoverIn");
-			eventDelegate.parameters[0].value = "リセット";
+			eventDelegate.parameters[0].value = "ScenePhotoMode/リセット";
 			this.btn_list_[this.btn_list_.Count - 1].gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate);
 		}
 		if (this.CopyBtn != null)
@@ -28,7 +28,7 @@ public class WindowPartsInputColorrPalette : MonoBehaviour
 			this.btn_list_.Add(this.CopyBtn);
 			EventDelegate.Add(this.btn_list_[this.btn_list_.Count - 1].onClick, new EventDelegate.Callback(this.OnCopy));
 			EventDelegate eventDelegate = new EventDelegate(this, "OnMouseHoverIn");
-			eventDelegate.parameters[0].value = "コピー";
+			eventDelegate.parameters[0].value = "ScenePhotoMode/コピー";
 			this.btn_list_[this.btn_list_.Count - 1].gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate);
 		}
 		if (this.PasteBtn != null)
@@ -36,7 +36,7 @@ public class WindowPartsInputColorrPalette : MonoBehaviour
 			this.btn_list_.Add(this.PasteBtn);
 			EventDelegate.Add(this.btn_list_[this.btn_list_.Count - 1].onClick, new EventDelegate.Callback(this.OnPaste));
 			EventDelegate eventDelegate = new EventDelegate(this, "OnMouseHoverIn");
-			eventDelegate.parameters[0].value = "ペースト";
+			eventDelegate.parameters[0].value = "ScenePhotoMode/ペースト";
 			this.btn_list_[this.btn_list_.Count - 1].gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate);
 		}
 		for (int i = 0; i < this.btn_list_.Count; i++)
@@ -100,7 +100,7 @@ public class WindowPartsInputColorrPalette : MonoBehaviour
 	public void OnMouseHoverIn(string text)
 	{
 		MouseExposition @object = MouseExposition.GetObject();
-		@object.text = text;
+		@object.textFromLanguageTerm = text;
 	}
 
 	public void OnMouseHoverOut()

+ 4 - 4
Assembly-CSharp/WindowPartsInputSliderSet.cs

@@ -25,7 +25,7 @@ public class WindowPartsInputSliderSet : MonoBehaviour
 			this.btn_list_.Add(this.ResetBtn);
 			EventDelegate.Add(this.btn_list_[this.btn_list_.Count - 1].onClick, new EventDelegate.Callback(this.OnReset));
 			EventDelegate eventDelegate = new EventDelegate(this, "OnMouseHoverIn");
-			eventDelegate.parameters[0].value = "リセット";
+			eventDelegate.parameters[0].value = "ScenePhotoMode/リセット";
 			this.btn_list_[this.btn_list_.Count - 1].gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate);
 		}
 		if (this.CopyBtn != null)
@@ -33,7 +33,7 @@ public class WindowPartsInputSliderSet : MonoBehaviour
 			this.btn_list_.Add(this.CopyBtn);
 			EventDelegate.Add(this.btn_list_[this.btn_list_.Count - 1].onClick, new EventDelegate.Callback(this.OnCopy));
 			EventDelegate eventDelegate = new EventDelegate(this, "OnMouseHoverIn");
-			eventDelegate.parameters[0].value = "コピー";
+			eventDelegate.parameters[0].value = "ScenePhotoMode/コピー";
 			this.btn_list_[this.btn_list_.Count - 1].gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate);
 		}
 		if (this.PasteBtn != null)
@@ -41,7 +41,7 @@ public class WindowPartsInputSliderSet : MonoBehaviour
 			this.btn_list_.Add(this.PasteBtn);
 			EventDelegate.Add(this.btn_list_[this.btn_list_.Count - 1].onClick, new EventDelegate.Callback(this.OnPaste));
 			EventDelegate eventDelegate = new EventDelegate(this, "OnMouseHoverIn");
-			eventDelegate.parameters[0].value = "ペースト";
+			eventDelegate.parameters[0].value = "ScenePhotoMode/ペースト";
 			this.btn_list_[this.btn_list_.Count - 1].gameObject.GetComponent<UIEventTrigger>().onHoverOver.Add(eventDelegate);
 		}
 		for (int j = 0; j < this.btn_list_.Count; j++)
@@ -133,7 +133,7 @@ public class WindowPartsInputSliderSet : MonoBehaviour
 	public void OnMouseHoverIn(string text)
 	{
 		MouseExposition @object = MouseExposition.GetObject();
-		@object.text = text;
+		@object.textFromLanguageTerm = text;
 	}
 
 	public void OnMouseHoverOut()

+ 19 - 0
Assembly-CSharp/XVI/AniLipSync/LowLatencyLipSyncContext.cs

@@ -27,6 +27,23 @@ namespace XVI.AniLipSync
 			{
 				return;
 			}
+			if (this.firstFreqCheck)
+			{
+				int frequency = this.audioSource.clip.frequency;
+				int samplingRate = OVRLipSync.SamplingRate;
+				if (frequency < samplingRate)
+				{
+					NUty.WinMessageBox(NUty.GetWindowHandle(), string.Concat(new object[]
+					{
+						"マイクのサンプリングレート ",
+						frequency,
+						"Hz がスピーカーのサンプリングレート\u3000",
+						samplingRate,
+						"Hz より低い設定になっています。マイクのサンプリングレートをスピーカー側に合せて下さい。"
+					}), "警告", 48);
+				}
+				this.firstFreqCheck = false;
+			}
 			int position = Microphone.GetPosition(this.m_MicInput.selectedDevice);
 			if (position < 0 || this.head == position)
 			{
@@ -88,5 +105,7 @@ namespace XVI.AniLipSync
 		private float[] microphoneBuffer = new float[441000];
 
 		private OVRLipSyncMicInput m_MicInput;
+
+		private bool firstFreqCheck = true;
 	}
 }

+ 50 - 15
Assembly-CSharp/YotogiClassListManager.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using I2.Loc;
 using MaidStatus;
 using MaidStatus.CsvData;
 using UnityEngine;
@@ -37,7 +38,7 @@ public class YotogiClassListManager : MonoBehaviour
 	private static List<YotogiClassListManager.Data> CreateDatas(List<YotogiClass.Data> datas, Status status)
 	{
 		List<YotogiClassListManager.Data> list = new List<YotogiClassListManager.Data>();
-		List<KeyValuePair<string, bool>> list2 = new List<KeyValuePair<string, bool>>();
+		List<KeyValuePair<string[], bool>> list2 = new List<KeyValuePair<string[], bool>>();
 		foreach (YotogiClass.Data data in datas)
 		{
 			list2 = data.learnConditions.CreateConditionTextAndStaturResults(status);
@@ -68,7 +69,7 @@ public class YotogiClassListManager : MonoBehaviour
 		{
 			this.InstantiateItem(this.storageObject);
 		}
-		this.conditionDatas = new Dictionary<int, KeyValuePair<string, Color>[]>();
+		this.conditionDatas = new Dictionary<int, KeyValuePair<string[], Color>[]>();
 		this.instansToDatas = new Dictionary<int, YotogiClassListManager.Data>();
 		this.conditionsObject.SetActive(false);
 		this.specialSkillLabelsParent.SetActive(false);
@@ -125,10 +126,10 @@ public class YotogiClassListManager : MonoBehaviour
 					GameObject gameObject = this.CreateItemObject(maid, ++num, data);
 					if (0 < data.conditionDatas.Length)
 					{
-						List<KeyValuePair<string, Color>> list4 = new List<KeyValuePair<string, Color>>();
-						foreach (KeyValuePair<string, bool> keyValuePair in data.conditionDatas)
+						List<KeyValuePair<string[], Color>> list4 = new List<KeyValuePair<string[], Color>>();
+						foreach (KeyValuePair<string[], bool> keyValuePair in data.conditionDatas)
 						{
-							list4.Add(new KeyValuePair<string, Color>(keyValuePair.Key, (!keyValuePair.Value) ? Color.gray : Color.white));
+							list4.Add(new KeyValuePair<string[], Color>(keyValuePair.Key, (!keyValuePair.Value) ? Color.gray : Color.white));
 						}
 						this.conditionDatas.Add(gameObject.GetInstanceID(), list4.ToArray());
 						this.instansToDatas.Add(gameObject.GetInstanceID(), data);
@@ -141,21 +142,26 @@ public class YotogiClassListManager : MonoBehaviour
 			GameObject gameObject2 = this.CreateItemObject(maid, -1, data2);
 			if (0 < data2.conditionDatas.Length)
 			{
-				List<KeyValuePair<string, Color>> list5 = new List<KeyValuePair<string, Color>>();
+				List<KeyValuePair<string[], Color>> list5 = new List<KeyValuePair<string[], Color>>();
 				if (data2.classData != null)
 				{
 					foreach (int num2 in data2.classData.learnConditions.requestPersonals)
 					{
 						if (maid.status.personal.id == num2)
 						{
-							list5.Add(new KeyValuePair<string, Color>("ヒロインタイプ " + maid.status.personal.drawName, Color.white));
+							string text = GameUty.supportMultiLanguage ? maid.status.personal.termName : maid.status.personal.drawName;
+							list5.Add(new KeyValuePair<string[], Color>(new string[]
+							{
+								"MaidStatus/条件文/ヒロインタイプ {0}",
+								text
+							}, Color.white));
 							break;
 						}
 					}
 				}
-				foreach (KeyValuePair<string, bool> keyValuePair2 in data2.conditionDatas)
+				foreach (KeyValuePair<string[], bool> keyValuePair2 in data2.conditionDatas)
 				{
-					list5.Add(new KeyValuePair<string, Color>(keyValuePair2.Key, (!keyValuePair2.Value) ? Color.gray : Color.white));
+					list5.Add(new KeyValuePair<string[], Color>(keyValuePair2.Key, (!keyValuePair2.Value) ? Color.gray : Color.white));
 				}
 				this.conditionDatas.Add(gameObject2.GetInstanceID(), list5.ToArray());
 				this.instansToDatas.Add(gameObject2.GetInstanceID(), data2);
@@ -189,6 +195,21 @@ public class YotogiClassListManager : MonoBehaviour
 		{
 			YotogiClassListManager.Data data = this.instansToDatas[instanceId];
 			this.conditionTitleLabel.text = data.classData.drawName + " 取得条件";
+			if (GameUty.supportMultiLanguage)
+			{
+				Localize component = this.conditionTitleLabel.GetComponent<Localize>();
+				if (component != null)
+				{
+					string termName = data.classData.termName;
+					Localize.ArgsPair[] termArgs = new Localize.ArgsPair[]
+					{
+						Localize.ArgsPair.Create(" {0}", false),
+						Localize.ArgsPair.Create("System/取得条件", true)
+					};
+					component.TermArgs = termArgs;
+					component.SetTerm(termName);
+				}
+			}
 			this.conditionList.SetTexts(this.conditionDatas[instanceId], 500);
 			this.conditionBG.height = 90 + this.conditionList.height;
 			this.conditionsObject.SetActive(true);
@@ -230,7 +251,16 @@ public class YotogiClassListManager : MonoBehaviour
 					{
 						if (num < this.specialSkillLabelList.Count)
 						{
-							this.specialSkillLabelList[num++].text = data3.name;
+							UILabel uilabel2 = this.specialSkillLabelList[num++];
+							uilabel2.text = data3.name;
+							if (GameUty.supportMultiLanguage)
+							{
+								Localize component2 = uilabel2.GetComponent<Localize>();
+								if (component2 != null)
+								{
+									component2.SetTerm(data3.termName);
+								}
+							}
 							if (this.specialSkillLabelList.Count == num)
 							{
 								this.specialSkillLabelList[num - 1].text = "etc...";
@@ -250,8 +280,8 @@ public class YotogiClassListManager : MonoBehaviour
 			this.specialSkillLabelsParent.SetActive(!string.IsNullOrEmpty(this.specialSkillLabelList[0].text));
 			if (this.specialSkillLabelsParent.activeSelf)
 			{
-				UIWidget component = UTY.GetChildObject(this.specialSkillLabelsParent, "BG", false).GetComponent<UIWidget>();
-				component.height = 100 + 36 * num;
+				UIWidget component3 = UTY.GetChildObject(this.specialSkillLabelsParent, "BG", false).GetComponent<UIWidget>();
+				component3.height = 100 + 36 * num;
 			}
 		}
 		else
@@ -296,8 +326,13 @@ public class YotogiClassListManager : MonoBehaviour
 			component.text = "EX";
 		}
 		UILabel component2 = UTY.GetChildObject(gameObject, "SkillName/Value", false).GetComponent<UILabel>();
-		component2.text = data.classData.drawName;
 		component2.color = (data.isLearn ? Color.white : Color.gray);
+		component2.text = data.classData.drawName;
+		Localize component3 = component2.GetComponent<Localize>();
+		if (component3 != null)
+		{
+			component3.SetTerm(data.classData.termName);
+		}
 		gameObject.GetComponent<BoxCollider>().enabled = !data.isLearn;
 		return gameObject;
 	}
@@ -349,7 +384,7 @@ public class YotogiClassListManager : MonoBehaviour
 
 	private List<UILabel> specialSkillLabelList;
 
-	private Dictionary<int, KeyValuePair<string, Color>[]> conditionDatas;
+	private Dictionary<int, KeyValuePair<string[], Color>[]> conditionDatas;
 
 	private Dictionary<int, YotogiClassListManager.Data> instansToDatas;
 
@@ -367,7 +402,7 @@ public class YotogiClassListManager : MonoBehaviour
 
 		public YotogiClass.Data classData;
 
-		public KeyValuePair<string, bool>[] conditionDatas;
+		public KeyValuePair<string[], bool>[] conditionDatas;
 
 		public bool isLearn;
 

+ 27 - 4
Assembly-CSharp/YotogiCommandFactory.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.Runtime.CompilerServices;
+using I2.Loc;
 using UnityEngine;
 using wf;
 using Yotogis;
@@ -297,7 +298,18 @@ public class YotogiCommandFactory : MonoBehaviour
 			name = string.Empty;
 		}
 		GameObject gameObject = Utility.CreatePrefab(this.HiddenTree, "SceneYotogi/Yotogi/Prefab/CommandCategoryTitle", true);
-		gameObject.GetComponent<UILabel>().text = name;
+		UILabel component = gameObject.GetComponent<UILabel>();
+		component.text = name;
+		if (GameUty.supportMultiLanguage)
+		{
+			component.text = string.Empty;
+			Localize component2 = component.GetComponent<Localize>();
+			component2.SetTerm(name);
+			if (string.IsNullOrEmpty(component.text))
+			{
+				component.text = Utility.GetTermLastWord(name);
+			}
+		}
 		gameObject.name = "-" + name;
 		Vector3 localPosition = gameObject.transform.localPosition;
 		localPosition.z = (float)id;
@@ -312,7 +324,18 @@ public class YotogiCommandFactory : MonoBehaviour
 			name = string.Empty;
 		}
 		GameObject gameObject = Utility.CreatePrefab(this.HiddenTree, "SceneYotogi/Yotogi/Prefab/Command", true);
-		UTY.GetChildObject(gameObject, "Name", false).GetComponent<UILabel>().text = name;
+		UILabel component = UTY.GetChildObject(gameObject, "Name", false).GetComponent<UILabel>();
+		component.text = name;
+		if (GameUty.supportMultiLanguage)
+		{
+			component.text = string.Empty;
+			Localize component2 = component.GetComponent<Localize>();
+			component2.SetTerm(name);
+			if (string.IsNullOrEmpty(component.text))
+			{
+				component.text = Utility.GetTermLastWord(name);
+			}
+		}
 		gameObject.name = "cm:" + name;
 		Vector3 localPosition = gameObject.transform.localPosition;
 		localPosition.z = (float)id;
@@ -351,12 +374,12 @@ public class YotogiCommandFactory : MonoBehaviour
 
 	private string GetGroupName(Skill.Data.Command.Data.Basic commandDataBasic)
 	{
-		return commandDataBasic.group_name;
+		return (!GameUty.supportMultiLanguage) ? commandDataBasic.group_name : commandDataBasic.termGroupName;
 	}
 
 	private string GetCommandName(Skill.Data.Command.Data.Basic commandDataBasic)
 	{
-		return commandDataBasic.name;
+		return (!GameUty.supportMultiLanguage) ? commandDataBasic.name : commandDataBasic.termName;
 	}
 
 	public GameObject HiddenTree;

+ 9 - 2
Assembly-CSharp/YotogiKagManager.cs

@@ -45,7 +45,7 @@ public class YotogiKagManager : BaseKagManager
 		{
 			motionKagManager = GameMain.Instance.ScriptMgr.kag_mot_dic[0];
 		}
-		Maid maidAndMan = base.GetMaidAndMan(tag_data);
+		Maid maidAndMan = base.GetMaidAndMan(tag_data, true);
 		if (motionKagManager != null && maidAndMan != null && maidAndMan.body0 != null && maidAndMan.body0.m_Bones != null)
 		{
 			string[] array = (!maidAndMan.boMAN) ? motionKagManager.last_maid_motion_set_log : motionKagManager.last_man_motion_set_log;
@@ -143,7 +143,14 @@ public class YotogiKagManager : BaseKagManager
 	{
 		if (this.yotogi_mgr_ != null)
 		{
-			this.yotogi_mgr_.play_mgr.ClearRepeatVoiceData();
+			if (tag_data.IsValid("maid"))
+			{
+				this.yotogi_mgr_.play_mgr.RemoveRepeatVoiceData(tag_data.GetTagProperty("maid").AsInteger());
+			}
+			else
+			{
+				this.yotogi_mgr_.play_mgr.ClearRepeatVoiceData();
+			}
 		}
 		return false;
 	}

+ 16 - 3
Assembly-CSharp/YotogiManager.cs

@@ -84,6 +84,8 @@ public class YotogiManager : WfScreenManager
 		this.backup_status_.skill_id_list = new HashSet<int>();
 		this.backup_status_.yotogi_class_list = new HashSet<int>();
 		this.CreateBackUpStatus();
+		this.CreateBackUpSkillID();
+		this.CreateBackUpYotogiClass();
 		GameMain.Instance.ScriptMgr.yotogi_kag.SetYotogiManager(this);
 		string b = "SceneYotogi";
 		this.is_new_yotogi_ = false;
@@ -644,10 +646,13 @@ public class YotogiManager : WfScreenManager
 			for (int i = 0; i < keyArray.Length; i++)
 			{
 				Skill.Data data = Skill.Get(keyArray[i]);
-				if (!hashSet.Contains(data.player_num))
+				if (data.specialConditionType != Skill.Data.SpecialConditionType.NewType)
 				{
-					hashSet.Add(data.player_num);
-					list.Add(data.player_num);
+					if (!hashSet.Contains(data.player_num))
+					{
+						hashSet.Add(data.player_num);
+						list.Add(data.player_num);
+					}
 				}
 			}
 		}
@@ -901,6 +906,14 @@ public class YotogiManager : WfScreenManager
 		}
 	}
 
+	public static bool isGP001HaremMode
+	{
+		get
+		{
+			return GameMain.Instance.CMSystem.GetTmpGenericFlag("harem_maidswap") != 0;
+		}
+	}
+
 	public void AddDebugLog(string text)
 	{
 	}

+ 6 - 0
Assembly-CSharp/YotogiParamScroll.cs

@@ -11,6 +11,12 @@ public class YotogiParamScroll : MonoBehaviour
 	{
 		this.panel_ = UTY.GetChildObject(base.gameObject, "Mask", false).GetComponent<UIPanel>();
 		this.parent_obj_ = UTY.GetChildObject(base.gameObject, "Parent", false);
+		UIGrid component = this.parent_obj_.GetComponent<UIGrid>();
+		if (GameUty.supportMultiLanguage)
+		{
+			component.cellWidth = 150f;
+			Utility.ResetNGUI(component);
+		}
 		Transform transform = this.parent_obj_.transform;
 		this.label_array = new YotogiParamScroll.LabelAndLocalize[transform.childCount];
 		for (int i = 0; i < this.label_array.Length; i++)

+ 17 - 5
Assembly-CSharp/YotogiParameterViewer.cs

@@ -51,13 +51,21 @@ public class YotogiParameterViewer : MonoBehaviour
 			return;
 		}
 		Status status = this.maid_.status;
-		this.label_dictionary_[YotogiParameterViewer.LabelType.Contract].GetComponent<Localize>().SetTerm(EnumConvert.GetTerm(status.contract));
+		Action<YotogiParameterViewer.LabelType, string, string> action = delegate(YotogiParameterViewer.LabelType labelType, string rawText, string termText)
+		{
+			this.label_dictionary_[labelType].text = rawText;
+			Localize component = this.label_dictionary_[YotogiParameterViewer.LabelType.Contract].GetComponent<Localize>();
+			if (component != null)
+			{
+				component.SetTerm(termText);
+			}
+		};
+		action(YotogiParameterViewer.LabelType.Contract, EnumConvert.GetString(status.contract), EnumConvert.GetTerm(status.contract));
 		this.label_dictionary_[YotogiParameterViewer.LabelType.Name].text = status.lastName + "\n" + status.firstName;
 		this.label_dictionary_[YotogiParameterViewer.LabelType.YotogiPlayCount].text = status.playCountYotogi.ToString();
-		this.label_dictionary_[YotogiParameterViewer.LabelType.Seikeiken].GetComponent<Localize>().SetTerm(EnumConvert.GetTerm(status.seikeiken));
-		this.label_dictionary_[YotogiParameterViewer.LabelType.Relation].GetComponent<Localize>().SetTerm(EnumConvert.GetTerm(status.relation));
-		this.label_dictionary_[YotogiParameterViewer.LabelType.ConditionText].GetComponent<Localize>().SetTerm(status.conditionTermText);
-		UIWidget component = UTY.GetChildObject(this.label_dictionary_[YotogiParameterViewer.LabelType.ConditionText].transform.parent.gameObject, "Line", false).GetComponent<UIWidget>();
+		action(YotogiParameterViewer.LabelType.Seikeiken, EnumConvert.GetString(status.seikeiken), EnumConvert.GetTerm(status.seikeiken));
+		action(YotogiParameterViewer.LabelType.Relation, EnumConvert.GetString(status.relation), EnumConvert.GetTerm(status.relation));
+		action(YotogiParameterViewer.LabelType.ConditionText, status.conditionText, status.conditionTermText);
 	}
 
 	public void UpdateTextParam()
@@ -99,6 +107,10 @@ public class YotogiParameterViewer : MonoBehaviour
 	{
 		this.attributeViewer = obj;
 		this.attributeViewer.gameObject.SetActive(false);
+		if (GameUty.supportMultiLanguage)
+		{
+			this.attributeViewer.transform.localPosition = new Vector3(184f, 0f, 0f);
+		}
 	}
 
 	public void OnHoverOver()

+ 136 - 37
Assembly-CSharp/YotogiPlayManager.cs

@@ -16,6 +16,15 @@ public class YotogiPlayManager : WfScreenChildren
 		this.yotogi_mgr_ = base.GetComponentInParent<YotogiManager>();
 		UTY.GetChildObject(base.root_obj, "ParameterViewer", false).SetActive(true);
 		UTY.GetChildObject(base.root_obj, "SkillSelectViewer", false).SetActive(true);
+		if (GameUty.supportMultiLanguage)
+		{
+			UIPanel component = UTY.GetChildObject(base.root_obj, "ParameterViewer/YotogiParameterViewer", false).GetComponent<UIPanel>();
+			Vector4 baseClipRegion = component.baseClipRegion;
+			component.baseClipRegion = new Vector4(component.baseClipRegion.x, component.baseClipRegion.y, component.baseClipRegion.z + 74f, component.baseClipRegion.w);
+			Vector3 localPosition = component.transform.localPosition;
+			component.transform.localPosition = new Vector3(localPosition.x - 37f, localPosition.y, localPosition.z);
+		}
+		UTY.GetChildObject(base.root_obj, "ParameterViewer", false).GetComponentInChildren<HideScroll>().UpdatePanelData();
 		this.common_buttons_ = UTY.GetChildObject(base.root_obj, "UndressingViewer/CommonPanel", false).GetComponent<YotogiCommonButtons>();
 		this.command_factory_ = UTY.GetChildObject(base.root_obj, "CommandViewer/SkillViewer/MaskGroup/SkillGroup/CommandParent/CommandUnit", false).GetComponent<YotogiCommandFactory>();
 		this.command_factory_.SetCommandCreateCallBack(new YotogiCommandFactory.CommandCreateCallBack(this.OnCreateCommand));
@@ -37,26 +46,26 @@ public class YotogiPlayManager : WfScreenChildren
 		{
 			GameObject gameObject = transform.GetChild(i).gameObject;
 			GameObject childObject = UTY.GetChildObject(gameObject, "Icon", false);
-			UIButton component = childObject.GetComponent<UIButton>();
-			component.onClick.Clear();
-			UISprite component2 = UTY.GetChildObject(gameObject, "SkillName", false).GetComponent<UISprite>();
-			UILabel componentInChildren = component2.GetComponentInChildren<UILabel>();
-			UIRect uirect = component2;
+			UIButton component2 = childObject.GetComponent<UIButton>();
+			component2.onClick.Clear();
+			UISprite component3 = UTY.GetChildObject(gameObject, "SkillName", false).GetComponent<UISprite>();
+			UILabel componentInChildren = component3.GetComponentInChildren<UILabel>();
+			UIRect uirect = component3;
 			float alpha = 0f;
 			componentInChildren.alpha = alpha;
 			uirect.alpha = alpha;
-			EventDelegate.Add(component.onClick, new EventDelegate.Callback(this.OnSkillIconClick));
-			UIEventTrigger component3 = childObject.GetComponent<UIEventTrigger>();
+			EventDelegate.Add(component2.onClick, new EventDelegate.Callback(this.OnSkillIconClick));
+			UIEventTrigger component4 = childObject.GetComponent<UIEventTrigger>();
 			int num = i;
-			EventDelegate.Add(component3.onHoverOver, delegate()
+			EventDelegate.Add(component4.onHoverOver, delegate()
 			{
 				this.VisibleSkillName(num, true);
 			});
-			EventDelegate.Add(component3.onHoverOut, delegate()
+			EventDelegate.Add(component4.onHoverOut, delegate()
 			{
 				this.VisibleSkillName(num, false);
 			});
-			EventDelegate.Add(component3.onDragStart, delegate()
+			EventDelegate.Add(component4.onDragStart, delegate()
 			{
 				this.VisibleSkillName(num, false);
 			});
@@ -70,8 +79,11 @@ public class YotogiPlayManager : WfScreenChildren
 	protected override void OnCall()
 	{
 		GameMain.Instance.MainCamera.FadeInNoUI(0f, true);
-		uGUITutorialPanel.OpenTutorial("YotogiCommand", null, false);
-		GameMain.Instance.SysShortcut.strSceneHelpName = "YotogiCommand";
+		if (!this.yotogi_mgr_.is_new_yotogi_mode)
+		{
+			uGUITutorialPanel.OpenTutorial("YotogiCommand", null, false);
+			GameMain.Instance.SysShortcut.strSceneHelpName = "YotogiCommand";
+		}
 		this.maid_ = this.yotogi_mgr_.maid;
 		this.is_faint_end = false;
 		string systemVers = GameMain.Instance.CMSystem.GetSystemVers("ExciteLock");
@@ -148,7 +160,15 @@ public class YotogiPlayManager : WfScreenChildren
 			childObject.SetActive(true);
 			childObject2.SetActive(false);
 			this.param_basic_bar_ = UTY.GetChildObject(childObject, "ParameterViewer/MaskGroup/ParameterParent", false).GetComponent<YotogiParamBasicBar>();
-			this.paramenter_viewer_ = Utility.CreatePrefab(UTY.GetChildObject(base.root_obj, "ParameterViewer/YotogiParameterViewer/MaskGroup", false), "SceneYotogi/Common/Prefab/ParameterViewer", true).GetComponent<YotogiParameterViewer>();
+			string path = "SceneYotogi/Common/Prefab/ParameterViewer";
+			Vector3 zero = Vector3.zero;
+			if (GameUty.supportMultiLanguage)
+			{
+				path = "SceneYotogi/Common/Prefab/ParameterViewerWidth";
+				zero = new Vector3(44f, 0f, 0f);
+			}
+			this.paramenter_viewer_ = Utility.CreatePrefab(UTY.GetChildObject(base.root_obj, "ParameterViewer/YotogiParameterViewer/MaskGroup", false), path, true).GetComponent<YotogiParameterViewer>();
+			this.paramenter_viewer_.transform.localPosition = zero;
 			this.paramenter_viewer_.SetCostumeButtonVisible(false);
 			this.paramenter_viewer_.SetAttributeViewer(UTY.GetChildObject(base.root_obj.transform.parent.gameObject, "AttributeViewer", false).GetComponent<AttributeViewer>());
 			UTY.GetChildObject(base.root_obj, "SkillSelectViewer", false).SetActive(false);
@@ -182,9 +202,16 @@ public class YotogiPlayManager : WfScreenChildren
 			GameObject gameObject = childObject4.transform.parent.gameObject;
 			UTY.GetChildObject(gameObject, "SectionLine", false).transform.localPosition = new Vector3(-12f, -277f, 0f);
 			UTY.GetChildObject(gameObject, "ParamView", false).transform.localPosition = new Vector3(109f, -279f, 0f);
-			UIGrid component2 = UTY.GetChildObject(gameObject, "ParamView/Parent", false).GetComponent<UIGrid>();
-			component2.maxPerLine = 2;
-			component2.enabled = true;
+			if (this.param_scroll_ != null)
+			{
+				this.param_scroll_.Init();
+			}
+			UIGrid componentInChildren = UTY.GetChildObject(gameObject, "ParamView", false).GetComponentInChildren<UIGrid>(true);
+			if (componentInChildren != null)
+			{
+				componentInChildren.maxPerLine = 2;
+				componentInChildren.enabled = true;
+			}
 			if (this.heroineChangeFlag)
 			{
 				UTY.GetChildObject(base.root_obj, "ParameterViewer", false).SetActive(false);
@@ -362,6 +389,10 @@ public class YotogiPlayManager : WfScreenChildren
 					else
 					{
 						maid = this.maid_;
+						if (YotogiManager.isGP001HaremMode)
+						{
+							maid = GameMain.Instance.CharacterMgr.GetMaid(0);
+						}
 					}
 					if (!maid.AudioMan.isPlay())
 					{
@@ -414,7 +445,7 @@ public class YotogiPlayManager : WfScreenChildren
 			}
 			else
 			{
-				GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/気絶して夜伽終了報告", SystemDialog.TYPE.OK, delegate
+				GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/気絶して夜伽終了報告", null, SystemDialog.TYPE.OK, delegate
 				{
 					GameMain.Instance.SysDlg.Close();
 					this.playing_skill_no_ = -1;
@@ -495,7 +526,14 @@ public class YotogiPlayManager : WfScreenChildren
 				}
 			}
 		}
-		this.undressing_mgr_.SetMaid(this.maid_, list.ToArray());
+		if (!YotogiManager.isGP001HaremMode)
+		{
+			this.undressing_mgr_.SetMaid(this.maid_, list.ToArray());
+		}
+		else
+		{
+			this.undressing_mgr_.SetMaid(characterMgr.GetMaid(0), list.ToArray());
+		}
 		if (!this.maid_.Visible)
 		{
 			this.maid_.Visible = true;
@@ -624,7 +662,18 @@ public class YotogiPlayManager : WfScreenChildren
 
 	public string CallNormalFile(string file, string label)
 	{
-		string text = ScriptManager.ReplacePersonal(this.replace_personal_target_maid_array_, file);
+		string text = string.Empty;
+		if (YotogiManager.isGP001HaremMode)
+		{
+			Maid[] array = new Maid[this.replace_personal_target_maid_array_.Length];
+			this.replace_personal_target_maid_array_.CopyTo(array, 0);
+			array[0] = GameMain.Instance.CharacterMgr.GetMaid(0);
+			text = ScriptManager.ReplacePersonal(array, file);
+		}
+		else
+		{
+			text = ScriptManager.ReplacePersonal(this.replace_personal_target_maid_array_, file);
+		}
 		GameMain.Instance.ScriptMgr.EvalScript("global.__skill_first_file = '" + text + "';");
 		if (label == null)
 		{
@@ -725,6 +774,19 @@ public class YotogiPlayManager : WfScreenChildren
 	{
 	}
 
+	public void RemoveRepeatVoiceData(int maidNo)
+	{
+		List<YotogiPlayManager.RepeatVoiceData> list = new List<YotogiPlayManager.RepeatVoiceData>();
+		foreach (YotogiPlayManager.RepeatVoiceData repeatVoiceData in this.repeat_voice_data_list_)
+		{
+			if (maidNo != repeatVoiceData.maid_no)
+			{
+				list.Add(repeatVoiceData);
+			}
+		}
+		this.repeat_voice_data_list_ = list;
+	}
+
 	public void ClearRepeatVoiceData()
 	{
 		this.repeat_voice_data_list_.Clear();
@@ -1391,8 +1453,11 @@ public class YotogiPlayManager : WfScreenChildren
 			text += "SOC4";
 			break;
 		}
-		this.ClearRepeatVoiceData();
-		GameMain.Instance.SoundMgr.VoiceStopAll();
+		if (!ScriptManager.isGP001Mode)
+		{
+			this.ClearRepeatVoiceData();
+			GameMain.Instance.SoundMgr.VoiceStopAll();
+		}
 		this.CallCommandFile(insert, text, lockRRUpdate);
 	}
 
@@ -1535,7 +1600,17 @@ public class YotogiPlayManager : WfScreenChildren
 		{
 			return;
 		}
-		file = ScriptManager.ReplacePersonal(this.replace_personal_target_maid_array_, file);
+		if (YotogiManager.isGP001HaremMode)
+		{
+			Maid[] array = new Maid[this.replace_personal_target_maid_array_.Length];
+			this.replace_personal_target_maid_array_.CopyTo(array, 0);
+			array[0] = GameMain.Instance.CharacterMgr.GetMaid(0);
+			file = ScriptManager.ReplacePersonal(array, file);
+		}
+		else
+		{
+			file = ScriptManager.ReplacePersonal(this.replace_personal_target_maid_array_, file);
+		}
 		file = Path.ChangeExtension(file, ".ks");
 		bool flag = false;
 		using (TJSVariant tjsvariant = new TJSVariant())
@@ -1645,26 +1720,46 @@ public class YotogiPlayManager : WfScreenChildren
 			this.commandExecConditionsPanel.SetActive(false);
 			return;
 		}
-		List<KeyValuePair<string, bool>> list = new List<KeyValuePair<string, bool>>();
+		List<KeyValuePair<string[], bool>> list = new List<KeyValuePair<string[], bool>>();
 		foreach (int num in command_data.basic.request_propensity)
 		{
 			Propensity.Data data = Propensity.GetData(num);
-			string key = "性癖【" + data.drawName + "】";
-			list.Add(new KeyValuePair<string, bool>(key, this.maid_.status.propensitys.ContainsKey(num)));
+			string[] key = new string[]
+			{
+				"MaidStatus/条件文/性癖【{0}】",
+				data.drawName
+			};
+			if (GameUty.supportMultiLanguage)
+			{
+				key = new string[]
+				{
+					"MaidStatus/条件文/性癖【{0}】",
+					data.termName
+				};
+			}
+			list.Add(new KeyValuePair<string[], bool>(key, this.maid_.status.propensitys.ContainsKey(num)));
 		}
 		if (command_data.basic.isEstrusTriggerCommand)
 		{
-			list.Add(new KeyValuePair<string, bool>("興奮 200", 200 <= this.maid_.status.currentExcite));
-			list.Add(new KeyValuePair<string, bool>("官能 300", 300 <= this.maid_.status.currentSensual));
+			list.Add(new KeyValuePair<string[], bool>(new string[]
+			{
+				"MaidStatus/条件文/興奮 {0}",
+				"200"
+			}, 200 <= this.maid_.status.currentExcite));
+			list.Add(new KeyValuePair<string[], bool>(new string[]
+			{
+				"MaidStatus/条件文/官能 {0}",
+				"300"
+			}, 300 <= this.maid_.status.currentSensual));
 		}
 		if (command_data.basic.executionConditionParameters != null)
 		{
-			List<KeyValuePair<string, bool>> list2 = command_data.basic.executionConditionParameters.CreateConditionTextAndStaturResults(this.maid_.status);
-			foreach (KeyValuePair<string, bool> item in list2)
+			List<KeyValuePair<string[], bool>> list2 = command_data.basic.executionConditionParameters.CreateConditionTextAndStaturResults(this.maid_.status);
+			foreach (KeyValuePair<string[], bool> item in list2)
 			{
-				if (this.is_free_mode && !item.Key.Contains("興奮"))
+				if (this.is_free_mode && !item.Key[0].Contains("興奮"))
 				{
-					list.Add(new KeyValuePair<string, bool>(item.Key, true));
+					list.Add(new KeyValuePair<string[], bool>(item.Key, true));
 				}
 				else
 				{
@@ -1677,15 +1772,19 @@ public class YotogiPlayManager : WfScreenChildren
 			this.commandExecConditionsPanel.SetActive(false);
 			return;
 		}
-		List<KeyValuePair<string, Color>> list3 = new List<KeyValuePair<string, Color>>();
-		foreach (KeyValuePair<string, bool> keyValuePair in list)
+		List<KeyValuePair<string[], Color>> list3 = new List<KeyValuePair<string[], Color>>();
+		foreach (KeyValuePair<string[], bool> keyValuePair in list)
 		{
-			list3.Add(new KeyValuePair<string, Color>(keyValuePair.Key, (!keyValuePair.Value) ? Color.gray : Color.white));
+			list3.Add(new KeyValuePair<string[], Color>(keyValuePair.Key, (!keyValuePair.Value) ? Color.gray : Color.white));
 		}
+		UIWidget widget = UTY.GetChildObject(this.commandExecConditionsPanel, "BG", false).GetComponent<UIWidget>();
+		this.commandExecConditionList.resizeUIEvent.Clear();
+		EventDelegate.Add(this.commandExecConditionList.resizeUIEvent, delegate()
+		{
+			widget.width = this.commandExecConditionList.width + 25;
+			widget.height = this.commandExecConditionList.height + 65;
+		});
 		this.commandExecConditionList.SetTexts(list3.ToArray(), -1);
-		UIWidget component = UTY.GetChildObject(this.commandExecConditionsPanel, "BG", false).GetComponent<UIWidget>();
-		component.width = this.commandExecConditionList.width + 25;
-		component.height = this.commandExecConditionList.height + 65;
 		Transform parent = this.commandExecConditionsPanel.transform.parent;
 		this.commandExecConditionsPanel.transform.SetParent(commandObject.transform, false);
 		this.commandExecConditionsPanel.transform.localPosition = Vector3.zero;

+ 6 - 1
Assembly-CSharp/YotogiResultManager.cs

@@ -13,7 +13,12 @@ public class YotogiResultManager : WfScreenChildren
 		this.yotogi_mgr_ = base.GetComponentInParent<YotogiManager>();
 		this.common_buttons_ = UTY.GetChildObject(base.root_obj, "CommonPanel", false).GetComponent<YotogiCommonButtons>();
 		this.common_buttons_.viwe_reset_btn.gameObject.SetActive(false);
-		GameObject gameObject = Utility.CreatePrefab(base.root_obj, "SceneYotogi/Common/Prefab/ParameterViewer", true);
+		string path = "SceneYotogi/Common/Prefab/ParameterViewer";
+		if (GameUty.supportMultiLanguage)
+		{
+			path = "SceneYotogi/Common/Prefab/ParameterViewerWidth";
+		}
+		GameObject gameObject = Utility.CreatePrefab(base.root_obj, path, true);
 		gameObject.transform.SetParent(UTY.GetChildObject(base.root_obj, "ParameterViewer", false).transform, false);
 		gameObject.transform.localPosition = new Vector3(0f, 360f, 0f);
 		this.paramenter_viewer_ = gameObject.GetComponent<YotogiParameterViewer>();

+ 10 - 0
Assembly-CSharp/YotogiSkillContainerViewer.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections;
+using I2.Loc;
 using UnityEngine;
 using wf;
 using Yotogis;
@@ -373,6 +374,15 @@ public class YotogiSkillContainerViewer
 				{
 					this.skill_name_label_.text = this.skill_data_.name;
 				}
+				if (GameUty.supportMultiLanguage)
+				{
+					string translation = LocalizationManager.GetTranslation(this.skill_data_.termName, true, 0, true, false, null, null);
+					if (!string.IsNullOrEmpty(translation))
+					{
+						string str = (!this.lock_skill_exp) ? string.Empty : LocalizationManager.GetTranslation("SceneYotogi/(EXPロック)", true, 0, true, false, null, null);
+						this.skill_name_label_.text = translation + str;
+					}
+				}
 				this.skill_name_label_.width = 0;
 				this.skill_name_label_.MakePixelPerfect();
 				this.skill_name_bg_.width = this.skill_name_label_.width + 20;

+ 53 - 19
Assembly-CSharp/YotogiSkillListManager.cs

@@ -1,5 +1,6 @@
 using System;
 using System.Collections.Generic;
+using I2.Loc;
 using MaidStatus;
 using UnityEngine;
 using wf;
@@ -10,7 +11,7 @@ public class YotogiSkillListManager : MonoBehaviour
 	public static Dictionary<int, YotogiSkillListManager.Data> CreateDatas(Status status, bool specialConditionCheck, Skill.Data.SpecialConditionType type = Skill.Data.SpecialConditionType.Null)
 	{
 		Dictionary<int, YotogiSkillListManager.Data> dictionary = new Dictionary<int, YotogiSkillListManager.Data>();
-		List<KeyValuePair<string, bool>> list = new List<KeyValuePair<string, bool>>();
+		List<KeyValuePair<string[], bool>> list = new List<KeyValuePair<string[], bool>>();
 		foreach (SortedDictionary<int, Skill.Data> sortedDictionary in Skill.skill_data_list)
 		{
 			foreach (KeyValuePair<int, Skill.Data> keyValuePair in sortedDictionary)
@@ -32,7 +33,10 @@ public class YotogiSkillListManager : MonoBehaviour
 						}
 						if (list.Count == 0)
 						{
-							list.Add(new KeyValuePair<string, bool>("なし", true));
+							list.Add(new KeyValuePair<string[], bool>(new string[]
+							{
+								"MaidStatus/条件文/なし"
+							}, true));
 						}
 						YotogiSkillListManager.Data data = new YotogiSkillListManager.Data();
 						data.skillData = value;
@@ -49,7 +53,7 @@ public class YotogiSkillListManager : MonoBehaviour
 	public static Dictionary<int, YotogiSkillListManager.Data> CreateDatasOld(Status status)
 	{
 		Dictionary<int, YotogiSkillListManager.Data> dictionary = new Dictionary<int, YotogiSkillListManager.Data>();
-		List<KeyValuePair<string, bool>> list = new List<KeyValuePair<string, bool>>();
+		List<KeyValuePair<string[], bool>> list = new List<KeyValuePair<string[], bool>>();
 		foreach (SortedDictionary<int, Skill.Old.Data> sortedDictionary in Skill.Old.skill_data_list)
 		{
 			foreach (KeyValuePair<int, Skill.Old.Data> keyValuePair in sortedDictionary)
@@ -65,7 +69,10 @@ public class YotogiSkillListManager : MonoBehaviour
 					}
 					if (list.Count == 0)
 					{
-						list.Add(new KeyValuePair<string, bool>("なし", true));
+						list.Add(new KeyValuePair<string[], bool>(new string[]
+						{
+							"MaidStatus/条件文/なし"
+						}, true));
 					}
 					YotogiSkillListManager.Data data = new YotogiSkillListManager.Data();
 					data.skillDataOld = value;
@@ -93,7 +100,7 @@ public class YotogiSkillListManager : MonoBehaviour
 		{
 			this.InstantiateSkillItem(this.storageObject);
 		}
-		this.conditionDatas = new Dictionary<int, KeyValuePair<string, Color>[]>();
+		this.conditionDatas = new Dictionary<int, KeyValuePair<string[], Color>[]>();
 		this.instansToSkillDatas = new Dictionary<int, KeyValuePair<Skill.Data, Skill.Old.Data>>();
 		this.conditionsObject.SetActive(false);
 	}
@@ -147,14 +154,15 @@ public class YotogiSkillListManager : MonoBehaviour
 			else
 			{
 				string skillName = (value.skillData == null) ? value.skillDataOld.name : value.skillData.name;
+				string skillNameTerm = (value.skillData == null) ? value.skillDataOld.name : value.skillData.termName;
 				int skillId = (value.skillData == null) ? value.skillDataOld.id : value.skillData.id;
-				GameObject gameObject = this.CreateItemObject(maid, ++num, skillName, skillId);
+				GameObject gameObject = this.CreateItemObject(maid, ++num, skillName, skillNameTerm, skillId);
 				if (0 < value.conditionDatas.Length)
 				{
-					List<KeyValuePair<string, Color>> list3 = new List<KeyValuePair<string, Color>>();
-					foreach (KeyValuePair<string, bool> keyValuePair2 in value.conditionDatas)
+					List<KeyValuePair<string[], Color>> list3 = new List<KeyValuePair<string[], Color>>();
+					foreach (KeyValuePair<string[], bool> keyValuePair2 in value.conditionDatas)
 					{
-						list3.Add(new KeyValuePair<string, Color>(keyValuePair2.Key, (!keyValuePair2.Value) ? Color.gray : Color.white));
+						list3.Add(new KeyValuePair<string[], Color>(keyValuePair2.Key, (!keyValuePair2.Value) ? Color.gray : Color.white));
 					}
 					this.conditionDatas.Add(gameObject.GetInstanceID(), list3.ToArray());
 					this.instansToSkillDatas.Add(gameObject.GetInstanceID(), new KeyValuePair<Skill.Data, Skill.Old.Data>(value.skillData, value.skillDataOld));
@@ -164,25 +172,31 @@ public class YotogiSkillListManager : MonoBehaviour
 		foreach (YotogiSkillListManager.Data data in list2)
 		{
 			string skillName2 = (data.skillData == null) ? data.skillDataOld.name : data.skillData.name;
+			string skillNameTerm2 = (data.skillData == null) ? data.skillDataOld.name : data.skillData.termName;
 			int skillId2 = (data.skillData == null) ? data.skillDataOld.id : data.skillData.id;
-			GameObject gameObject2 = this.CreateItemObject(maid, -1, skillName2, skillId2);
+			GameObject gameObject2 = this.CreateItemObject(maid, -1, skillName2, skillNameTerm2, skillId2);
 			if (0 < data.conditionDatas.Length)
 			{
-				List<KeyValuePair<string, Color>> list4 = new List<KeyValuePair<string, Color>>();
+				List<KeyValuePair<string[], Color>> list4 = new List<KeyValuePair<string[], Color>>();
 				if (data.skillData != null)
 				{
 					foreach (Personal.Data data2 in data.skillData.getcondition_data.requestPersonals)
 					{
 						if (maid.status.personal.id == data2.id)
 						{
-							list4.Add(new KeyValuePair<string, Color>("ヒロインタイプ " + maid.status.personal.drawName, Color.white));
+							string text = GameUty.supportMultiLanguage ? maid.status.personal.termName : maid.status.personal.drawName;
+							list4.Add(new KeyValuePair<string[], Color>(new string[]
+							{
+								"MaidStatus/条件文/ヒロインタイプ {0}",
+								text
+							}, Color.white));
 							break;
 						}
 					}
 				}
-				foreach (KeyValuePair<string, bool> keyValuePair3 in data.conditionDatas)
+				foreach (KeyValuePair<string[], bool> keyValuePair3 in data.conditionDatas)
 				{
-					list4.Add(new KeyValuePair<string, Color>(keyValuePair3.Key, (!keyValuePair3.Value) ? Color.gray : Color.white));
+					list4.Add(new KeyValuePair<string[], Color>(keyValuePair3.Key, (!keyValuePair3.Value) ? Color.gray : Color.white));
 				}
 				this.conditionDatas.Add(gameObject2.GetInstanceID(), list4.ToArray());
 				this.instansToSkillDatas.Add(gameObject2.GetInstanceID(), new KeyValuePair<Skill.Data, Skill.Old.Data>(data.skillData, data.skillDataOld));
@@ -216,6 +230,21 @@ public class YotogiSkillListManager : MonoBehaviour
 		{
 			KeyValuePair<Skill.Data, Skill.Old.Data> keyValuePair = this.instansToSkillDatas[instanceId];
 			this.conditionTitleLabel.text = ((keyValuePair.Key == null) ? keyValuePair.Value.name : keyValuePair.Key.name) + " 取得条件";
+			if (GameUty.supportMultiLanguage)
+			{
+				Localize component = this.conditionTitleLabel.GetComponent<Localize>();
+				if (component != null)
+				{
+					string term = (keyValuePair.Key == null) ? keyValuePair.Value.name : keyValuePair.Key.termName;
+					Localize.ArgsPair[] termArgs = new Localize.ArgsPair[]
+					{
+						Localize.ArgsPair.Create(" {0}", false),
+						Localize.ArgsPair.Create("System/取得条件", true)
+					};
+					component.TermArgs = termArgs;
+					component.SetTerm(term);
+				}
+			}
 			this.conditionList.SetTexts(this.conditionDatas[instanceId], 500);
 			this.conditionBG.height = 90 + this.conditionList.height;
 			this.conditionsObject.SetActive(true);
@@ -231,7 +260,7 @@ public class YotogiSkillListManager : MonoBehaviour
 		this.conditionsObject.SetActive(false);
 	}
 
-	private GameObject CreateItemObject(Maid maid, int no, string skillName, int skillId)
+	private GameObject CreateItemObject(Maid maid, int no, string skillName, string skillNameTerm, int skillId)
 	{
 		GameObject gameObject;
 		if (this.storageObject.transform.childCount == 0)
@@ -262,7 +291,12 @@ public class YotogiSkillListManager : MonoBehaviour
 		}
 		UILabel component2 = UTY.GetChildObject(gameObject, "SkillName/Value", false).GetComponent<UILabel>();
 		component2.text = skillName;
-		UISprite component3 = UTY.GetChildObject(gameObject, "LevelOfAchievement/Icon", false).GetComponent<UISprite>();
+		Localize component3 = component2.GetComponent<Localize>();
+		if (component3 != null)
+		{
+			component3.SetTerm(skillNameTerm);
+		}
+		UISprite component4 = UTY.GetChildObject(gameObject, "LevelOfAchievement/Icon", false).GetComponent<UISprite>();
 		int num = (!maid.status.yotogiSkill.Contains(skillId)) ? 0 : maid.status.yotogiSkill.Get(skillId).level;
 		string spriteName = "profile_yotogiskill_sign_minus";
 		if (num != 1)
@@ -287,7 +321,7 @@ public class YotogiSkillListManager : MonoBehaviour
 		{
 			spriteName = "cm3d2_edit_profile_yotogiskill_sign_batu";
 		}
-		component3.spriteName = spriteName;
+		component4.spriteName = spriteName;
 		component2.color = ((num != 0) ? Color.white : Color.gray);
 		gameObject.GetComponent<BoxCollider>().enabled = (num == 0);
 		return gameObject;
@@ -335,7 +369,7 @@ public class YotogiSkillListManager : MonoBehaviour
 
 	private UIWidget conditionBG;
 
-	private Dictionary<int, KeyValuePair<string, Color>[]> conditionDatas;
+	private Dictionary<int, KeyValuePair<string[], Color>[]> conditionDatas;
 
 	private Dictionary<int, KeyValuePair<Skill.Data, Skill.Old.Data>> instansToSkillDatas;
 
@@ -353,7 +387,7 @@ public class YotogiSkillListManager : MonoBehaviour
 
 		public Skill.Old.Data skillDataOld;
 
-		public KeyValuePair<string, bool>[] conditionDatas;
+		public KeyValuePair<string[], bool>[] conditionDatas;
 
 		public YotogiSkillData maidStatusSkillData;
 	}

+ 15 - 5
Assembly-CSharp/YotogiSkillSelectManager.cs

@@ -14,7 +14,12 @@ public class YotogiSkillSelectManager : WfScreenChildren
 		base.Awake();
 		this.yotogi_mgr_ = base.GetComponentInParent<YotogiManager>();
 		this.common_buttons_ = UTY.GetChildObject(base.root_obj, "CommonPanel", false).GetComponent<YotogiCommonButtons>();
-		GameObject gameObject = Utility.CreatePrefab(base.root_obj, "SceneYotogi/Common/Prefab/ParameterViewer", true);
+		string path = "SceneYotogi/Common/Prefab/ParameterViewer";
+		if (GameUty.supportMultiLanguage)
+		{
+			path = "SceneYotogi/Common/Prefab/ParameterViewerWidth";
+		}
+		GameObject gameObject = Utility.CreatePrefab(base.root_obj, path, true);
 		gameObject.transform.localPosition = new Vector3(782f, 449f, 0f);
 		this.paramenter_viewer_ = gameObject.GetComponent<YotogiParameterViewer>();
 		this.paramenter_viewer_.SetAttributeViewer(UTY.GetChildObject(base.root_obj.transform.parent.gameObject, "AttributeViewer", false).GetComponent<AttributeViewer>());
@@ -32,7 +37,9 @@ public class YotogiSkillSelectManager : WfScreenChildren
 			this.category_data_array_[i].category = (Yotogi.Category)i;
 			this.category_data_array_[i].obj = Utility.CreatePrefab(childObject2, "SceneYotogi/SkillSelect/Prefab/CategoryBtn", true);
 			this.category_data_array_[i].obj.name = this.category_data_array_[i].category.ToString();
-			this.category_data_array_[i].obj.GetComponentInChildren<Localize>().SetTerm("SceneYotogi/" + this.category_data_array_[i].obj.name);
+			this.category_data_array_[i].obj.GetComponentInChildren<UILabel>().text = this.category_data_array_[i].obj.name;
+			string term = "SceneYotogi/スキルカテゴリー/" + this.category_data_array_[i].obj.name;
+			this.category_data_array_[i].obj.GetComponentInChildren<Localize>().SetTerm(term);
 			UIWFTabButton component = UTY.GetChildObject(this.category_data_array_[i].obj, "Button", false).GetComponent<UIWFTabButton>();
 			EventDelegate eventDelegate = new EventDelegate(this, "OnClickFromCategoryButton");
 			EventDelegate.Parameter[] parameters = eventDelegate.parameters;
@@ -83,8 +90,11 @@ public class YotogiSkillSelectManager : WfScreenChildren
 				maid.Visible = false;
 			}
 		}
-		uGUITutorialPanel.OpenTutorial("YotogiSkill", null, false);
-		GameMain.Instance.SysShortcut.strSceneHelpName = "YotogiSkill";
+		if (!this.yotogi_mgr_.is_new_yotogi_mode)
+		{
+			uGUITutorialPanel.OpenTutorial("YotogiSkill", null, false);
+			GameMain.Instance.SysShortcut.strSceneHelpName = "YotogiSkill";
+		}
 		GameMain.Instance.MainLight.Reset();
 		GameMain.Instance.CharacterMgr.ResetCharaPosAll();
 		GameMain.Instance.MainCamera.Reset(CameraMain.CameraType.Target, true);
@@ -356,7 +366,7 @@ public class YotogiSkillSelectManager : WfScreenChildren
 		this.yotogi_mgr_.SetPlaySkillArray(array);
 		if (this.maid_.status.currentHp <= 0)
 		{
-			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/気絶注意", SystemDialog.TYPE.OK_CANCEL, delegate
+			GameMain.Instance.SysDlg.ShowFromLanguageTerm("Dialog/気絶注意", null, SystemDialog.TYPE.OK_CANCEL, delegate
 			{
 				GameMain.Instance.SysDlg.Close();
 				if (this.yotogi_mgr_.null_mgr.IsExistNextLabel())

+ 21 - 6
Assembly-CSharp/YotogiSkillUnit.cs

@@ -70,7 +70,7 @@ public class YotogiSkillUnit : MonoBehaviour
 		}
 	}
 
-	public void SetSkillData(Maid maid, Skill.Data set_skill_data, YotogiSkillData param_data, YotogiSkillLockUnit lock_unit, KeyValuePair<string, bool>[] conditionDatas = null)
+	public void SetSkillData(Maid maid, Skill.Data set_skill_data, YotogiSkillData param_data, YotogiSkillLockUnit lock_unit, KeyValuePair<string[], bool>[] conditionDatas = null)
 	{
 		this.maid_ = maid;
 		this.skill_data_ = set_skill_data;
@@ -99,11 +99,11 @@ public class YotogiSkillUnit : MonoBehaviour
 		{
 			if (conditionDatas != null && 0 < conditionDatas.Length)
 			{
-				this.conditionDatas_ = new KeyValuePair<string, Color>[conditionDatas.Length];
+				this.conditionDatas_ = new KeyValuePair<string[], Color>[conditionDatas.Length];
 				int num = 0;
-				foreach (KeyValuePair<string, bool> keyValuePair in conditionDatas)
+				foreach (KeyValuePair<string[], bool> keyValuePair in conditionDatas)
 				{
-					this.conditionDatas_[num++] = new KeyValuePair<string, Color>(keyValuePair.Key, (!keyValuePair.Value) ? Color.gray : Color.white);
+					this.conditionDatas_[num++] = new KeyValuePair<string[], Color>(keyValuePair.Key, (!keyValuePair.Value) ? Color.gray : Color.white);
 				}
 			}
 			this.isEnabled = false;
@@ -211,7 +211,22 @@ public class YotogiSkillUnit : MonoBehaviour
 			return;
 		}
 		this.conditionTitleLabel.text = this.skill_data_.name + " 習得条件";
-		if (20 < this.conditionTitleLabel.text.Length)
+		if (GameUty.supportMultiLanguage)
+		{
+			Localize component = this.conditionTitleLabel.GetComponent<Localize>();
+			if (component != null)
+			{
+				string termName = this.skill_data_.termName;
+				Localize.ArgsPair[] termArgs = new Localize.ArgsPair[]
+				{
+					Localize.ArgsPair.Create(" {0}", false),
+					Localize.ArgsPair.Create("System/取得条件", true)
+				};
+				component.TermArgs = termArgs;
+				component.SetTerm(termName);
+			}
+		}
+		else if (20 < this.conditionTitleLabel.text.Length)
 		{
 			this.conditionTitleLabel.fontSize = 20;
 		}
@@ -275,7 +290,7 @@ public class YotogiSkillUnit : MonoBehaviour
 
 	private GameObject mouseEventObject;
 
-	private KeyValuePair<string, Color>[] conditionDatas_;
+	private KeyValuePair<string[], Color>[] conditionDatas_;
 
 	private GameObject conditionsObject;
 

+ 8 - 2
Assembly-CSharp/YotogiStageSelectManager.cs

@@ -14,8 +14,14 @@ public class YotogiStageSelectManager : WfScreenChildren
 
 	protected override void OnCall()
 	{
-		uGUITutorialPanel.OpenTutorial("YotogiStageSelect", null, false);
-		GameMain.Instance.SysShortcut.strSceneHelpName = "YotogiStageSelect";
+		if (!this.yotogi_mgr_.is_new_yotogi_mode)
+		{
+			uGUITutorialPanel.OpenTutorial("YotogiStageSelect", null, false);
+		}
+		if (!this.yotogi_mgr_.is_new_yotogi_mode)
+		{
+			GameMain.Instance.SysShortcut.strSceneHelpName = "YotogiStageSelect";
+		}
 		this.fix_stage_ = false;
 		this.maid_ = this.yotogi_mgr_.maid;
 		this.maid_.Visible = true;

+ 13 - 2
Assembly-CSharp/YotogiStageUnit.cs

@@ -14,10 +14,21 @@ public class YotogiStageUnit : MonoBehaviour
 		this.star_parent_ = new GameObject[2];
 		this.star_parent_[0] = UTY.GetChildObject(childObject, "StarGroup", false);
 		this.star_parent_[1] = UTY.GetChildObject(childObject, "StarMarkGroup", false);
+		if (GameUty.supportMultiLanguage)
+		{
+			foreach (GameObject gameObject in this.star_parent_)
+			{
+				Vector3 localPosition = gameObject.transform.localPosition;
+				gameObject.transform.localPosition = new Vector3(40f, localPosition.y, localPosition.z);
+				UIGrid component = gameObject.GetComponent<UIGrid>();
+				component.cellWidth = 22f;
+				component.Reposition();
+			}
+		}
 		Transform transform = UTY.GetChildObject(childObject, "StarGroup", false).transform;
-		for (int i = 0; i < transform.childCount; i++)
+		for (int j = 0; j < transform.childCount; j++)
 		{
-			this.star_sprite_list_.Add(transform.GetChild(i).GetComponent<UISprite>());
+			this.star_sprite_list_.Add(transform.GetChild(j).GetComponent<UISprite>());
 		}
 		this.is_change_bg_ = true;
 	}

+ 28 - 11
Assembly-CSharp/Yotogis/Skill.cs

@@ -1077,9 +1077,9 @@ namespace Yotogis
 
 				public class GetConditionData : SkillAcquisitionCondition
 				{
-					public override List<KeyValuePair<string, bool>> CreateConditionTextAndStaturResults(MaidStatus.Status status)
+					public override List<KeyValuePair<string[], bool>> CreateConditionTextAndStaturResults(MaidStatus.Status status)
 					{
-						List<KeyValuePair<string, bool>> list = base.CreateConditionTextAndStaturResults(status);
+						List<KeyValuePair<string[], bool>> list = base.CreateConditionTextAndStaturResults(status);
 						if (this.marriage)
 						{
 							bool value = false;
@@ -1087,7 +1087,10 @@ namespace Yotogis
 							{
 								value = true;
 							}
-							list.Add(new KeyValuePair<string, bool>("結婚済み", value));
+							list.Add(new KeyValuePair<string[], bool>(new string[]
+							{
+								"結婚済み"
+							}, value));
 						}
 						return list;
 					}
@@ -1190,6 +1193,16 @@ namespace Yotogis
 						}
 						value = array3[1];
 					}
+					else
+					{
+						try
+						{
+							key = int.Parse(text);
+						}
+						catch (Exception)
+						{
+						}
+					}
 					this.man_setting[j] = new KeyValuePair<int, string>(key, value);
 				}
 				this.exec_seikeiken = new Dictionary<Seikeiken, bool>();
@@ -1284,7 +1297,7 @@ namespace Yotogis
 					string cellAsString3 = csv.GetCellAsString(num++, y);
 					if (string.IsNullOrEmpty(cellAsString2))
 					{
-						IL_598:
+						IL_5AC:
 						NDebug.Assert(command_data_cell_dic.ContainsKey(this.id), this.name + "の情報は見つかりませんでした");
 						int[] array8 = command_data_cell_dic[this.id];
 						this.command_basic_cell_y = array8[0];
@@ -1347,7 +1360,7 @@ namespace Yotogis
 						this.playable_stageid_list.Add(YotogiStage.uniqueNameToId(cellAsString2));
 					}
 				}
-				goto IL_598;
+				goto IL_5AC;
 			}
 
 			public void SetOldSkillData(Skill.Old.Data data)
@@ -1520,7 +1533,7 @@ namespace Yotogis
 			{
 				get
 				{
-					return "Yotogi/SkillName/" + this.name;
+					return "YotogiSkillName/" + this.name;
 				}
 			}
 
@@ -1911,7 +1924,7 @@ namespace Yotogis
 						{
 							get
 							{
-								return "Yotogi/SkillCommand/" + this.name;
+								return "YotogiSkillCommand/" + this.name;
 							}
 						}
 
@@ -1919,7 +1932,7 @@ namespace Yotogis
 						{
 							get
 							{
-								return "Yotogi/SkillName/" + this.group_name;
+								return "YotogiSkillName/" + this.group_name;
 							}
 						}
 
@@ -2059,9 +2072,9 @@ namespace Yotogis
 
 			public class GetConditionData : SkillAcquisitionCondition
 			{
-				public override List<KeyValuePair<string, bool>> CreateConditionTextAndStaturResults(MaidStatus.Status status)
+				public override List<KeyValuePair<string[], bool>> CreateConditionTextAndStaturResults(MaidStatus.Status status)
 				{
-					List<KeyValuePair<string, bool>> list = base.CreateConditionTextAndStaturResults(status);
+					List<KeyValuePair<string[], bool>> list = base.CreateConditionTextAndStaturResults(status);
 					if (this.maid_class != null)
 					{
 						bool value = false;
@@ -2069,7 +2082,11 @@ namespace Yotogis
 						{
 							value = true;
 						}
-						list.Add(new KeyValuePair<string, bool>(this.maid_class.drawName + " Lv" + this.maid_class_level.ToString(), value));
+						list.Add(new KeyValuePair<string[], bool>(new string[]
+						{
+							this.maid_class.drawName + " Lv{0}",
+							this.maid_class_level.ToString()
+						}, value));
 					}
 					return list;
 				}

+ 46 - 14
Assembly-CSharp/Yotogis/SkillAcquisitionCondition.cs

@@ -6,20 +6,20 @@ namespace Yotogis
 {
 	public class SkillAcquisitionCondition
 	{
-		public List<string> CreateConditionTexts()
+		public List<string[]> CreateConditionTexts()
 		{
-			List<KeyValuePair<string, bool>> list = this.CreateConditionTextAndStaturResults(null);
-			List<string> list2 = new List<string>();
-			foreach (KeyValuePair<string, bool> keyValuePair in list)
+			List<KeyValuePair<string[], bool>> list = this.CreateConditionTextAndStaturResults(null);
+			List<string[]> list2 = new List<string[]>();
+			foreach (KeyValuePair<string[], bool> keyValuePair in list)
 			{
 				list2.Add(keyValuePair.Key);
 			}
 			return list2;
 		}
 
-		public virtual List<KeyValuePair<string, bool>> CreateConditionTextAndStaturResults(Status status)
+		public virtual List<KeyValuePair<string[], bool>> CreateConditionTextAndStaturResults(Status status)
 		{
-			List<KeyValuePair<string, bool>> list = new List<KeyValuePair<string, bool>>();
+			List<KeyValuePair<string[], bool>> list = new List<KeyValuePair<string[], bool>>();
 			if (this.yotogi_class != null)
 			{
 				bool value = false;
@@ -27,42 +27,74 @@ namespace Yotogis
 				{
 					value = true;
 				}
-				list.Add(new KeyValuePair<string, bool>(this.yotogi_class.drawName, value));
+				string text = GameUty.supportMultiLanguage ? this.yotogi_class.termName : this.yotogi_class.drawName;
+				list.Add(new KeyValuePair<string[], bool>(new string[]
+				{
+					text
+				}, value));
 			}
 			if (0 < this.inyoku)
 			{
 				bool value2 = status != null && this.inyoku <= status.inyoku;
-				list.Add(new KeyValuePair<string, bool>("淫欲 " + this.inyoku.ToString(), value2));
+				list.Add(new KeyValuePair<string[], bool>(new string[]
+				{
+					"MaidStatus/条件文/淫欲 {0}",
+					this.inyoku.ToString()
+				}, value2));
 			}
 			if (0 < this.m_value)
 			{
 				bool value3 = status != null && this.m_value <= status.mvalue;
-				list.Add(new KeyValuePair<string, bool>("M性 " + this.m_value.ToString(), value3));
+				list.Add(new KeyValuePair<string[], bool>(new string[]
+				{
+					"MaidStatus/条件文/M性 {0}",
+					this.m_value.ToString()
+				}, value3));
 			}
 			if (0 < this.hentai)
 			{
 				bool value4 = status != null && this.hentai <= status.hentai;
-				list.Add(new KeyValuePair<string, bool>("変態 " + this.hentai.ToString(), value4));
+				list.Add(new KeyValuePair<string[], bool>(new string[]
+				{
+					"MaidStatus/条件文/変態 {0}",
+					this.hentai.ToString()
+				}, value4));
 			}
 			if (0 < this.housi)
 			{
 				bool value5 = status != null && this.housi <= status.housi;
-				list.Add(new KeyValuePair<string, bool>("奉仕 " + this.housi.ToString(), value5));
+				list.Add(new KeyValuePair<string[], bool>(new string[]
+				{
+					"MaidStatus/条件文/奉仕 {0}",
+					this.housi.ToString()
+				}, value5));
 			}
 			if (0 < this.lovely)
 			{
 				bool value6 = status != null && this.lovely <= status.lovely;
-				list.Add(new KeyValuePair<string, bool>("可憐 " + this.lovely.ToString(), value6));
+				list.Add(new KeyValuePair<string[], bool>(new string[]
+				{
+					"MaidStatus/条件文/可憐 {0}",
+					this.lovely.ToString()
+				}, value6));
 			}
 			if (0 < this.elegance)
 			{
 				bool value7 = status != null && this.elegance <= status.elegance;
-				list.Add(new KeyValuePair<string, bool>("気品 " + this.elegance.ToString(), value7));
+				list.Add(new KeyValuePair<string[], bool>(new string[]
+				{
+					"MaidStatus/条件文/気品 {0}",
+					this.elegance.ToString()
+				}, value7));
 			}
 			if (0 < this.charm)
 			{
 				bool value8 = status != null && this.charm <= status.charm;
-				list.Add(new KeyValuePair<string, bool>("魅惑 " + this.charm.ToString(), value8));
+				list.Add(new KeyValuePair<string[], bool>(new string[]
+				{
+					"MaidStatus/条件文/魅惑 {0}",
+					this.charm.ToString()
+				}, value8));
 			}
 			return list;
 		}

+ 14 - 4
Assembly-CSharp/uGUISelectableSound.cs

@@ -12,6 +12,10 @@ public class uGUISelectableSound : MonoBehaviour, IPointerEnterHandler, IPointer
 
 	public virtual void OnPointerEnter(PointerEventData eventData)
 	{
+		if (!this.m_IsPlayHover)
+		{
+			return;
+		}
 		if (this.m_PtrSelectable && (!this.m_PtrSelectable.interactable || !this.m_PtrSelectable.enabled))
 		{
 			return;
@@ -26,6 +30,10 @@ public class uGUISelectableSound : MonoBehaviour, IPointerEnterHandler, IPointer
 
 	public virtual void OnPointerDown(PointerEventData eventData)
 	{
+		if (!this.m_IsPlayClick)
+		{
+			return;
+		}
 		if (this.m_PtrSelectable && (!this.m_PtrSelectable.interactable || !this.m_PtrSelectable.enabled))
 		{
 			return;
@@ -40,10 +48,6 @@ public class uGUISelectableSound : MonoBehaviour, IPointerEnterHandler, IPointer
 
 	public virtual void OnPointerClick(PointerEventData eventData)
 	{
-		if (this.m_PtrSelectable && (!this.m_PtrSelectable.interactable || !this.m_PtrSelectable.enabled))
-		{
-			return;
-		}
 		if (this.m_IsPointerDown)
 		{
 			GameMain.Instance.SoundMgr.PlaySystem(SoundMgr.SeType.Click);
@@ -67,4 +71,10 @@ public class uGUISelectableSound : MonoBehaviour, IPointerEnterHandler, IPointer
 	private Selectable m_PtrSelectable;
 
 	private bool m_IsPointerDown;
+
+	[SerializeField]
+	public bool m_IsPlayHover = true;
+
+	[SerializeField]
+	public bool m_IsPlayClick = true;
 }

+ 17 - 0
Assembly-CSharp/wf/Utility.cs

@@ -158,6 +158,23 @@ namespace wf
 			return result;
 		}
 
+		public static string GetTermLastWord(string termName)
+		{
+			if (string.IsNullOrEmpty(termName))
+			{
+				return string.Empty;
+			}
+			if (termName.IndexOf('/') != -1)
+			{
+				string[] array = termName.Split(new char[]
+				{
+					'/'
+				});
+				return array[array.Length - 1];
+			}
+			return termName;
+		}
+
 		public static byte[] ZlibCompresss(byte[] data)
 		{
 			return DeflateStream.CompressBuffer(data);