Geoffrey Horsington 4 سال پیش
والد
کامیت
eef85b28b0
87فایلهای تغییر یافته به همراه3060 افزوده شده و 365 حذف شده
  1. 5 5
      Assembly-CSharp.sln
  2. 7 0
      Assembly-CSharp/ADVKagManager.cs
  3. 6 1
      Assembly-CSharp/AVProVideoPlayer.cs
  4. 16 1
      Assembly-CSharp/Assembly-CSharp.csproj
  5. 1 2
      Assembly-CSharp/BaseKagManager.cs
  6. 1 1
      Assembly-CSharp/BasePhotoCustomObject.cs
  7. 1 1
      Assembly-CSharp/BasePhotoWindowManager.cs
  8. 79 4
      Assembly-CSharp/CMSystem.cs
  9. 5 5
      Assembly-CSharp/CharacterMgr.cs
  10. 109 0
      Assembly-CSharp/ColliderEventVR.cs
  11. 2 2
      Assembly-CSharp/ControllerShortcutSettingData.cs
  12. 24 1
      Assembly-CSharp/DanceData.cs
  13. 67 30
      Assembly-CSharp/DanceMain.cs
  14. 31 6
      Assembly-CSharp/DanceSelect.cs
  15. 11 4
      Assembly-CSharp/DanceSelectMusicInfo.cs
  16. 2 2
      Assembly-CSharp/DanceSubtitleMgr.cs
  17. 3 0
      Assembly-CSharp/DebugScenarioDraw.cs
  18. 2 2
      Assembly-CSharp/DescScheduleYotogi.cs
  19. 1 1
      Assembly-CSharp/DeskManager.cs
  20. 3 3
      Assembly-CSharp/DynamicBone.cs
  21. 1 1
      Assembly-CSharp/DynamicSkirtBone.cs
  22. 1 1
      Assembly-CSharp/EditMod.cs
  23. 1 1
      Assembly-CSharp/EmpireLifeModeManager.cs
  24. 1 1
      Assembly-CSharp/FacilityManager.cs
  25. 74 0
      Assembly-CSharp/Fish.cs
  26. 42 0
      Assembly-CSharp/FishMove.cs
  27. 1 1
      Assembly-CSharp/FreeModeItemLifeMode.cs
  28. 4 4
      Assembly-CSharp/FreeModeItemVip.cs
  29. 1 8
      Assembly-CSharp/FullBodyIKCtrl.cs
  30. 2 2
      Assembly-CSharp/GameMain.cs
  31. 21 4
      Assembly-CSharp/GameModeManager.cs
  32. 35 59
      Assembly-CSharp/GameUty.cs
  33. 2 2
      Assembly-CSharp/HandSignShortcut.cs
  34. 6 4
      Assembly-CSharp/I2/Loc/LanguageSource.cs
  35. 73 0
      Assembly-CSharp/ICODES/STUDIO/WWebView/InputTools.cs
  36. 42 0
      Assembly-CSharp/ICODES/STUDIO/WWebView/SimpleGazeCursor.cs
  37. 382 0
      Assembly-CSharp/ICODES/STUDIO/WWebView/WWebView.cs
  38. 53 0
      Assembly-CSharp/ICODES/STUDIO/WWebView/WWebViewListener.cs
  39. 518 0
      Assembly-CSharp/ICODES/STUDIO/WWebView/WWebViewPlugin.cs
  40. 74 0
      Assembly-CSharp/ICODES/STUDIO/WWebView/WWebViewSystem.cs
  41. 269 0
      Assembly-CSharp/ICODES/STUDIO/WWebView/WWebViewWin32.cs
  42. 1 0
      Assembly-CSharp/IKCtrlData.cs
  43. 6 0
      Assembly-CSharp/KaraokeDataManager.cs
  44. 1 1
      Assembly-CSharp/Kasizuki/KasizukiManager.cs
  45. 6 4
      Assembly-CSharp/LifeModeChangeWindow.cs
  46. 3 3
      Assembly-CSharp/Maid.cs
  47. 4 4
      Assembly-CSharp/MaidManagementMain.cs
  48. 1 1
      Assembly-CSharp/MaidParts.cs
  49. 1 1
      Assembly-CSharp/MaidProp.cs
  50. 17 1
      Assembly-CSharp/MaidStatus/Status.cs
  51. 1 1
      Assembly-CSharp/Menu.cs
  52. 6 1
      Assembly-CSharp/MessageClass.cs
  53. 1 1
      Assembly-CSharp/Misc.cs
  54. 1 1
      Assembly-CSharp/ModCompile.cs
  55. 1 1
      Assembly-CSharp/OnHoverTaskIcon.cs
  56. 2 2
      Assembly-CSharp/OvrIK.cs
  57. 1 1
      Assembly-CSharp/PhotoModeSaveAndLoad.cs
  58. 1 1
      Assembly-CSharp/PlayerStatus/Status.cs
  59. 152 0
      Assembly-CSharp/PrivateEventListUnit.cs
  60. 46 14
      Assembly-CSharp/PrivateEventManager.cs
  61. 96 0
      Assembly-CSharp/PrivateEventSelectPanel.cs
  62. 234 47
      Assembly-CSharp/PrivateMaidMode/DataBase.cs
  63. 87 0
      Assembly-CSharp/PrivateMaidMode/PrivateCharaSelectMain.cs
  64. 2 6
      Assembly-CSharp/PrivateMaidTouchManager.cs
  65. 20 1
      Assembly-CSharp/PrivateModeEventObject.cs
  66. 4 0
      Assembly-CSharp/RhythmAction_Mgr.cs
  67. 44 20
      Assembly-CSharp/ScenarioData.cs
  68. 1 1
      Assembly-CSharp/SceneEdit.cs
  69. 24 0
      Assembly-CSharp/SceneNPCEdit/EditCharacterDatabase.cs
  70. 18 2
      Assembly-CSharp/SceneNPCEdit/NPCCharaSelect.cs
  71. 3 1
      Assembly-CSharp/SceneNPCEdit/NPCEditStatus.cs
  72. 1 1
      Assembly-CSharp/SceneNPCEdit/SaveData.cs
  73. 0 17
      Assembly-CSharp/ScenePrivateEventModeAwake.cs
  74. 49 30
      Assembly-CSharp/Schedule/ScheduleAPI.cs
  75. 10 2
      Assembly-CSharp/Schedule/ScheduleCSVData.cs
  76. 100 1
      Assembly-CSharp/ScriptManager.cs
  77. 26 19
      Assembly-CSharp/TBody.cs
  78. 1 1
      Assembly-CSharp/TaskUnit.cs
  79. 1 1
      Assembly-CSharp/TatooAlphaWindow.cs
  80. 18 1
      Assembly-CSharp/UIWFConditionList.cs
  81. 1 1
      Assembly-CSharp/WindowPartsFingerPreset.cs
  82. 8 0
      Assembly-CSharp/YotogiManager.cs
  83. 5 1
      Assembly-CSharp/YotogiParamBasicBar.cs
  84. 8 0
      Assembly-CSharp/YotogiPlayManager.cs
  85. 31 7
      Assembly-CSharp/Yotogis/Skill.cs
  86. 3 3
      Assembly-CSharp/com/workman/cm3d2/scene/dailyEtc/DailyAPI.cs
  87. 34 5
      Assembly-CSharp/uGUICanvas.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", "{A9E2D430-7780-4356-A18F-F7C9CE6F8D7A}"
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Assembly-CSharp", "Assembly-CSharp\Assembly-CSharp.csproj", "{36DED01E-9E94-43B2-837D-CE9E60164CEF}"
 EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
@@ -11,10 +11,10 @@ Global
 		Release|Any CPU = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
-		{A9E2D430-7780-4356-A18F-F7C9CE6F8D7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
-		{A9E2D430-7780-4356-A18F-F7C9CE6F8D7A}.Debug|Any CPU.Build.0 = Debug|Any CPU
-		{A9E2D430-7780-4356-A18F-F7C9CE6F8D7A}.Release|Any CPU.ActiveCfg = Release|Any CPU
-		{A9E2D430-7780-4356-A18F-F7C9CE6F8D7A}.Release|Any CPU.Build.0 = Release|Any CPU
+		{36DED01E-9E94-43B2-837D-CE9E60164CEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{36DED01E-9E94-43B2-837D-CE9E60164CEF}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{36DED01E-9E94-43B2-837D-CE9E60164CEF}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{36DED01E-9E94-43B2-837D-CE9E60164CEF}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 7 - 0
Assembly-CSharp/ADVKagManager.cs

@@ -28,6 +28,8 @@ public class ADVKagManager : BaseKagManager
 		this.kag_.AddTagCallBack("calldialog", new KagScript.KagTagCallBack(this.TagCallDialog));
 		this.kag_.AddTagCallBack("_choicesshow", new KagScript.KagTagCallBack(this.Tag_ChoicesShow));
 		this.kag_.LoadScenarioString("@macro name='choicesshow'\n\t@_choicesshow\n\t@s\n\t@endmacro\n");
+		this.kag_.AddTagCallBack("voicewait", new KagScript.KagTagCallBack(this.TagVoiceWait));
+		this.kag_.AddTagCallBack("talkRepeat", new KagScript.KagTagCallBack(this.TagTalk));
 		this.kag_.Exec();
 	}
 
@@ -372,6 +374,11 @@ public class ADVKagManager : BaseKagManager
 		return false;
 	}
 
+	public bool TagVoiceWait(KagTagSupport tag_data)
+	{
+		return false;
+	}
+
 	protected override void PlayMaidMotion(Maid maid, string fn, bool additive = false, bool loop = false, bool boAddQue = false, float val = 0.5f)
 	{
 		if (maid == null || maid.body0 == null || !maid.body0.isLoadedBody)

+ 6 - 1
Assembly-CSharp/AVProVideoPlayer.cs

@@ -10,7 +10,12 @@ public class AVProVideoPlayer : MonoBehaviour
 		this.m_player = base.GetComponent<MediaPlayer>();
 		NDebug.Assert(this.m_player != null, "MediaPlayer コンポーネントが付いてないといけません。");
 		this.m_player.m_VideoLocation = MediaPlayer.FileLocation.AbsolutePathOrURL;
-		if (this.m_player.m_VideoPath.Replace("\\", "/").Contains("/"))
+		this.m_player.m_VideoPath = this.m_player.m_VideoPath.Replace("\\", "/");
+		if (this.m_player.m_VideoPath.Contains("movie_temp/"))
+		{
+			this.m_player.m_VideoPath = this.m_player.m_VideoPath.Replace("movie_temp/", string.Empty);
+		}
+		if (this.m_player.m_VideoPath.Contains("/"))
 		{
 			this.m_player.m_VideoPath = UTY.gameProjectPath + "\\GameData\\" + this.m_player.m_VideoPath;
 		}

+ 16 - 1
Assembly-CSharp/Assembly-CSharp.csproj

@@ -4,7 +4,7 @@
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
     <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
-    <ProjectGuid>{A9E2D430-7780-4356-A18F-F7C9CE6F8D7A}</ProjectGuid>
+    <ProjectGuid>{36DED01E-9E94-43B2-837D-CE9E60164CEF}</ProjectGuid>
     <OutputType>Library</OutputType>
     <RootNamespace>Assembly-CSharp</RootNamespace>
     <AssemblyName>Assembly-CSharp</AssemblyName>
@@ -75,6 +75,9 @@
     <Reference Include="UnityEngine.UI">
       <HintPath>A:\Gams\KISS\CMUlt\KISS\COM3D2\COM3D2x64_Data\Managed\UnityEngine.UI.dll</HintPath>
     </Reference>
+    <Reference Include="Win32">
+      <HintPath>A:\Gams\KISS\CMUlt\KISS\COM3D2\COM3D2x64_Data\Managed\Win32.dll</HintPath>
+    </Reference>
     <Reference Include="zxing.unity">
       <HintPath>A:\Gams\KISS\CMUlt\KISS\COM3D2\COM3D2x64_Data\Managed\zxing.unity.dll</HintPath>
     </Reference>
@@ -253,6 +256,7 @@
     <Compile Include="CMSystem.cs" />
     <Compile Include="CMT.cs" />
     <Compile Include="ColliderEvent.cs" />
+    <Compile Include="ColliderEventVR.cs" />
     <Compile Include="ColorPaletteManager.cs" />
     <Compile Include="ColorPaletteUIManager.cs" />
     <Compile Include="ColorPresetItem.cs" />
@@ -403,6 +407,8 @@
     <Compile Include="FileHackGlobalGameManagers.cs" />
     <Compile Include="FingerBlend.cs" />
     <Compile Include="FinishSyncrho.cs" />
+    <Compile Include="Fish.cs" />
+    <Compile Include="FishMove.cs" />
     <Compile Include="FluctuationOfParameterUnit.cs" />
     <Compile Include="FoveCamera.cs" />
     <Compile Include="FoveEyeRayMgr.cs" />
@@ -527,6 +533,13 @@
     <Compile Include="I2\Loc\TranslationJob_WEB.cs" />
     <Compile Include="I2\Loc\TranslationJob_WWW.cs" />
     <Compile Include="I2\Loc\TranslationQuery.cs" />
+    <Compile Include="ICODES\STUDIO\WWebView\InputTools.cs" />
+    <Compile Include="ICODES\STUDIO\WWebView\SimpleGazeCursor.cs" />
+    <Compile Include="ICODES\STUDIO\WWebView\WWebView.cs" />
+    <Compile Include="ICODES\STUDIO\WWebView\WWebViewListener.cs" />
+    <Compile Include="ICODES\STUDIO\WWebView\WWebViewPlugin.cs" />
+    <Compile Include="ICODES\STUDIO\WWebView\WWebViewSystem.cs" />
+    <Compile Include="ICODES\STUDIO\WWebView\WWebViewWin32.cs" />
     <Compile Include="IDisposableBase.cs" />
     <Compile Include="IExperienceSystem.cs" />
     <Compile Include="IFade.cs" />
@@ -940,7 +953,9 @@
     <Compile Include="PresetMgr.cs" />
     <Compile Include="PresetServer.cs" />
     <Compile Include="PrivateCharaSelectMove.cs" />
+    <Compile Include="PrivateEventListUnit.cs" />
     <Compile Include="PrivateEventManager.cs" />
+    <Compile Include="PrivateEventSelectPanel.cs" />
     <Compile Include="PrivateMaidMode\DataBase.cs" />
     <Compile Include="PrivateMaidMode\PrivateCharaSelectMain.cs" />
     <Compile Include="PrivateMaidMode\PrivateMaid.cs" />

+ 1 - 2
Assembly-CSharp/BaseKagManager.cs

@@ -5222,7 +5222,6 @@ public class BaseKagManager : IDisposable
 		{
 			val = 0f;
 		}
-		maid.IKCtrl.BlendTime = val;
 		maid.CrossFadeAbsolute(fn, this.script_mgr_.file_system, additive, loop, boAddQue, val, 1f);
 	}
 
@@ -5498,7 +5497,7 @@ public class BaseKagManager : IDisposable
 	public void Serialize(BinaryWriter binary)
 	{
 		binary.Write("CM3D2_KAG");
-		binary.Write(1350);
+		binary.Write(1430);
 		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(1350);
+				binaryWriter.Write(1430);
 				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(1350);
+				binaryWriter.Write(1430);
 				binaryWriter.Write(this.save_data_.Count);
 				foreach (KeyValuePair<string, Dictionary<string, Dictionary<string, string>>> keyValuePair3 in this.save_data_)
 				{

+ 79 - 4
Assembly-CSharp/CMSystem.cs

@@ -855,7 +855,7 @@ public class CMSystem
 	{
 		XElement xelement = new XElement("Config", new object[]
 		{
-			new XAttribute("Version", 1350),
+			new XAttribute("Version", 1430),
 			new XElement("System", new XElement("SysButtonShowAlways", this.SysButtonShowAlways)),
 			new XElement("Screen", new object[]
 			{
@@ -1203,7 +1203,7 @@ public class CMSystem
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_SYSTEM2");
-		binaryWriter.Write(1350);
+		binaryWriter.Write(1430);
 		binaryWriter.Write(this.m_dicEditColorPresetData.Count);
 		foreach (KeyValuePair<int, Dictionary<string, int>> keyValuePair in this.m_dicEditColorPresetData)
 		{
@@ -1835,9 +1835,69 @@ public class CMSystem
 			}
 		}
 
+		public bool PrivateModeEventListVisible
+		{
+			get
+			{
+				return this.m_bPrivateModeEventListVisible;
+			}
+			set
+			{
+				this.m_bPrivateModeEventListVisible = value;
+			}
+		}
+
+		public bool PrivateModeSettingEventListVisible
+		{
+			get
+			{
+				return this.m_bPrivateModeSettingEventListVisible;
+			}
+			set
+			{
+				this.m_bPrivateModeSettingEventListVisible = value;
+			}
+		}
+
+		public bool PrivateModeSettingDayTalkEnabled
+		{
+			get
+			{
+				return this.m_bPrivateModeSettingDayTalkEnabled;
+			}
+			set
+			{
+				this.m_bPrivateModeSettingDayTalkEnabled = value;
+			}
+		}
+
+		public bool PrivateModeSettingNightTalkEnabled
+		{
+			get
+			{
+				return this.m_bPrivateModeSettingNightTalkEnabled;
+			}
+			set
+			{
+				this.m_bPrivateModeSettingNightTalkEnabled = value;
+			}
+		}
+
+		public bool PrivateModeSettingHEventEnabled
+		{
+			get
+			{
+				return this.m_bPrivateModeSettingHEventEnabled;
+			}
+			set
+			{
+				this.m_bPrivateModeSettingHEventEnabled = value;
+			}
+		}
+
 		public void OnBeforeSerialize()
 		{
-			this.m_nVersion = 1350;
+			this.m_nVersion = 1430;
 		}
 
 		public void OnAfterDeserialize()
@@ -1845,7 +1905,7 @@ public class CMSystem
 		}
 
 		[SerializeField]
-		private int m_nVersion = 1350;
+		private int m_nVersion = 1430;
 
 		[SerializeField]
 		private string m_strDShowFilter = "Microsoft DTV-DVD Video Decoder";
@@ -1907,6 +1967,21 @@ public class CMSystem
 		[SerializeField]
 		private bool m_bEditEyeToCam = true;
 
+		[SerializeField]
+		private bool m_bPrivateModeEventListVisible = true;
+
+		[SerializeField]
+		private bool m_bPrivateModeSettingEventListVisible;
+
+		[SerializeField]
+		private bool m_bPrivateModeSettingDayTalkEnabled = true;
+
+		[SerializeField]
+		private bool m_bPrivateModeSettingNightTalkEnabled = true;
+
+		[SerializeField]
+		private bool m_bPrivateModeSettingHEventEnabled = true;
+
 		public enum OVR_MOVE_TYPE
 		{
 			WARP_DRAW_STEPROT,

+ 5 - 5
Assembly-CSharp/CharacterMgr.cs

@@ -991,7 +991,7 @@ public class CharacterMgr : MonoBehaviour
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		string result = string.Empty;
 		binaryWriter.Write("CM3D2_PRESET_S");
-		binaryWriter.Write(1350);
+		binaryWriter.Write(1430);
 		binaryWriter.Write((char)presset_type);
 		maid.SerializePropLowCapacity(binaryWriter);
 		maid.SerializeMultiColor(binaryWriter);
@@ -1008,7 +1008,7 @@ public class CharacterMgr : MonoBehaviour
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_PRESET");
-		binaryWriter.Write(1350);
+		binaryWriter.Write(1430);
 		binaryWriter.Write((int)f_type);
 		if (texture2D != null)
 		{
@@ -1054,7 +1054,7 @@ public class CharacterMgr : MonoBehaviour
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_PRESET");
-		binaryWriter.Write(1350);
+		binaryWriter.Write(1430);
 		binaryWriter.Write((int)f_type);
 		if (texture2D != null)
 		{
@@ -1318,7 +1318,7 @@ public class CharacterMgr : MonoBehaviour
 	public bool Serialize(BinaryWriter bwWrite)
 	{
 		bwWrite.Write("CM3D2_CHR_MGR");
-		bwWrite.Write(1350);
+		bwWrite.Write(1430);
 		this.m_PlayerStatus.Serialize(bwWrite);
 		bwWrite.Write(this.m_listStockMan.Count);
 		for (int i = 0; i < this.m_listStockMan.Count; i++)
@@ -1411,7 +1411,7 @@ public class CharacterMgr : MonoBehaviour
 		return true;
 	}
 
-	public const int MaidStockMax = 200;
+	public const int MaidStockMax = 999;
 
 	public const int ActiveMaidSlotCount = 18;
 

+ 109 - 0
Assembly-CSharp/ColliderEventVR.cs

@@ -0,0 +1,109 @@
+using System;
+using System.Collections.Generic;
+using UnityEngine;
+
+public class ColliderEventVR : MonoBehaviour
+{
+	private void Awake()
+	{
+		ColliderEventVR.isTouch = false;
+		ColliderEventVR.isActive = true;
+		ColliderEventVR.colliderList = new List<GameObject>();
+	}
+
+	private void Update()
+	{
+		if (!GameMain.Instance.VRMode)
+		{
+			if (NInput.GetMouseButtonDown(0))
+			{
+				if (UICamera.Raycast(Input.mousePosition))
+				{
+					return;
+				}
+				Ray ray = GameMain.Instance.MainCamera.camera.ScreenPointToRay(Input.mousePosition);
+				RaycastHit raycastHit = default(RaycastHit);
+				if (!Physics.Raycast(ray, out raycastHit, float.PositiveInfinity, LayerMask.GetMask(new string[]
+				{
+					LayerMask.LayerToName(base.gameObject.layer)
+				})) || raycastHit.transform != base.transform)
+				{
+					return;
+				}
+				if (this.onMouseDown != null)
+				{
+					this.onMouseDown();
+				}
+				return;
+			}
+			else if (NInput.GetMouseButtonUp(0))
+			{
+				if (UICamera.Raycast(Input.mousePosition))
+				{
+					return;
+				}
+				Ray ray2 = GameMain.Instance.MainCamera.camera.ScreenPointToRay(Input.mousePosition);
+				RaycastHit raycastHit2 = default(RaycastHit);
+				if (!Physics.Raycast(ray2, out raycastHit2, float.PositiveInfinity, LayerMask.GetMask(new string[]
+				{
+					LayerMask.LayerToName(base.gameObject.layer)
+				})) || raycastHit2.transform != base.transform)
+				{
+					return;
+				}
+				if (this.onMouseUp != null)
+				{
+					this.onMouseUp();
+				}
+				return;
+			}
+		}
+	}
+
+	private void FixedUpdate()
+	{
+		if (GameMain.Instance.VRMode && ColliderEventVR.isActive && ColliderEventVR.isTouch && ColliderEventVR.colliderList.Count > 0 && ColliderEventVR.colliderList[0] == base.gameObject)
+		{
+			ColliderEventVR.isActive = false;
+			if (this.onMouseDown != null)
+			{
+				this.onMouseDown();
+			}
+		}
+	}
+
+	private void OnTriggerEnter(Collider collider)
+	{
+		if (!ColliderEventVR.colliderList.Contains(base.gameObject))
+		{
+			ColliderEventVR.colliderList.Add(base.gameObject);
+		}
+		if (GameMain.Instance.VRMode && !ColliderEventVR.isTouch && collider.gameObject.layer == LayerMask.NameToLayer("OvrGrabHand"))
+		{
+			ColliderEventVR.isTouch = true;
+		}
+	}
+
+	private void OnTriggerExit(Collider collider)
+	{
+		if (ColliderEventVR.colliderList.Contains(base.gameObject))
+		{
+			ColliderEventVR.colliderList.Remove(base.gameObject);
+		}
+		if (ColliderEventVR.colliderList.Count <= 0)
+		{
+			ColliderEventVR.isActive = true;
+			ColliderEventVR.isTouch = false;
+		}
+	}
+
+	public Action onMouseDown;
+
+	public Action onMouseUp;
+
+	private static bool isTouch;
+
+	private static bool isActive = true;
+
+	private static List<GameObject> colliderList;
+}

+ 2 - 2
Assembly-CSharp/ControllerShortcutSettingData.cs

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

+ 24 - 1
Assembly-CSharp/DanceData.cs

@@ -24,6 +24,26 @@ public class DanceData
 		this.IsPlayable = this.InitialPlayable;
 	}
 
+	public static Dictionary<DanceData.BgType, int> DANCEBG_FLAGVAL_PAIR = new Dictionary<DanceData.BgType, int>
+	{
+		{
+			DanceData.BgType.Theater,
+			0
+		},
+		{
+			DanceData.BgType.LiveStage,
+			1
+		},
+		{
+			DanceData.BgType.PoleDance,
+			2
+		},
+		{
+			DanceData.BgType.ClassRoom,
+			3
+		}
+	};
+
 	public int ID;
 
 	public string title;
@@ -70,11 +90,14 @@ public class DanceData
 
 	public bool isShowSelectScene = true;
 
+	public string csvFolderName = string.Empty;
+
 	public enum BgType
 	{
 		LiveStage,
 		Theater,
-		PoleDance
+		PoleDance,
+		ClassRoom
 	}
 
 	public enum DanceTerm

+ 67 - 30
Assembly-CSharp/DanceMain.cs

@@ -141,11 +141,11 @@ public class DanceMain : MonoBehaviour
 		this.m_listKuchiPattern = new string[this.m_listKuchiPakuFile.Count];
 		Func<string, string> func = delegate(string fn)
 		{
-			TextAsset textAsset = Resources.Load("SceneDance/" + fn) as TextAsset;
-			NDebug.Assert(textAsset != null, "口パクパターンテキストファイルが開けません。" + fn);
-			string text3 = textAsset.text;
-			NDebug.Assert(text3.Length != 0, "口パクパターンファイル内が空です。" + fn);
-			return Regex.Replace(text3, "(\\r|\\n| )", string.Empty);
+			TextAsset textAsset2 = Resources.Load("SceneDance/" + fn) as TextAsset;
+			NDebug.Assert(textAsset2 != null, "口パクパターンテキストファイルが開けません。" + fn);
+			string text4 = textAsset2.text;
+			NDebug.Assert(text4.Length != 0, "口パクパターンファイル内が空です。" + fn);
+			return Regex.Replace(text4, "(\\r|\\n| )", string.Empty);
 		};
 		for (int l = 0; l < this.m_listKuchiPakuFile.Count; l++)
 		{
@@ -234,61 +234,98 @@ public class DanceMain : MonoBehaviour
 		{
 			if (!RhythmAction_Mgr.Instance.FactOrderList.Any((Maid e) => !e) && DanceMain.SelectDanceData != null)
 			{
-				goto IL_99B;
+				goto IL_AF3;
 			}
 		}
 		for (int num4 = 0; num4 < this.m_listTestPreset.Count; num4++)
 		{
 			Maid maid2 = GameMain.Instance.CharacterMgr.GetMaid(num4);
-			if (!maid2)
+			if (!maid2 || DanceMain.SelectDanceData == null)
 			{
-				maid2 = GameMain.Instance.CharacterMgr.AddStockMaid();
-				GameMain.Instance.CharacterMgr.SetActiveMaid(maid2, num4);
-				CharacterMgr.Preset preset;
-				if (DanceMain.SelectDanceData != null && num4 < DanceMain.SelectDanceData.preset_name.Count && !string.IsNullOrEmpty(DanceMain.SelectDanceData.preset_name[num4]))
+				if (!maid2)
 				{
-					preset = GameMain.Instance.CharacterMgr.PresetLoadFromResources(DanceMain.SelectDanceData.preset_name[num4]);
+					maid2 = GameMain.Instance.CharacterMgr.AddStockMaid();
+					GameMain.Instance.CharacterMgr.SetActiveMaid(maid2, num4);
+					this.m_listTempMaid.Add(maid2);
+				}
+				CharacterMgr.Preset preset = null;
+				bool flag2 = DanceMain.SelectDanceData != null && num4 < DanceMain.SelectDanceData.preset_name.Count && !string.IsNullOrEmpty(DanceMain.SelectDanceData.preset_name[num4]);
+				string text3 = (!flag2) ? this.m_listTestPreset[num4] : DanceMain.SelectDanceData.preset_name[num4];
+				byte[] buffer = null;
+				TextAsset textAsset = Resources.Load("Preset/" + text3) as TextAsset;
+				if (textAsset == null)
+				{
+					using (AFileBase afileBase = GameUty.FileSystem.FileOpen(text3 + ".preset"))
+					{
+						if (afileBase.IsValid())
+						{
+							buffer = afileBase.ReadAll();
+						}
+						else
+						{
+							NDebug.Assert(string.Format("{0}はResourcesにもGameDataにもありませんでした。", text3), false);
+						}
+					}
 				}
 				else
 				{
-					preset = GameMain.Instance.CharacterMgr.PresetLoadFromResources(this.m_listTestPreset[num4]);
+					buffer = textAsset.bytes;
+				}
+				using (MemoryStream memoryStream = new MemoryStream(buffer))
+				{
+					using (BinaryReader binaryReader = new BinaryReader(memoryStream))
+					{
+						preset = GameMain.Instance.CharacterMgr.PresetLoad(binaryReader, text3);
+					}
 				}
 				if (preset != null)
 				{
 					GameMain.Instance.CharacterMgr.PresetSet(maid2, preset);
 				}
-				this.m_listTempMaid.Add(maid2);
 				maid2.Visible = true;
 			}
 		}
 		if (DanceMain.SelectDanceData != null)
 		{
-			for (int num5 = 0; num5 < DanceMain.SelectDanceData.maid_order.Count; num5++)
+			if (DanceMain.SelectDanceData.maid_order.Count > 0)
 			{
-				int index2 = DanceMain.SelectDanceData.maid_order[num5];
-				if (!RhythmAction_Mgr.Instance.FactOrderList[index2])
+				for (int num5 = 0; num5 < DanceMain.SelectDanceData.maid_order.Count; num5++)
 				{
-					RhythmAction_Mgr.Instance.FactOrderList[index2] = GameMain.Instance.CharacterMgr.GetMaid(num5);
+					int index2 = DanceMain.SelectDanceData.maid_order[num5];
+					if (!RhythmAction_Mgr.Instance.FactOrderList[index2])
+					{
+						RhythmAction_Mgr.Instance.FactOrderList[index2] = GameMain.Instance.CharacterMgr.GetMaid(num5);
+					}
+				}
+			}
+			else
+			{
+				for (int num6 = 0; num6 < RhythmAction_Mgr.Instance.FactOrderList.Count; num6++)
+				{
+					if (!RhythmAction_Mgr.Instance.FactOrderList[num6])
+					{
+						RhythmAction_Mgr.Instance.FactOrderList[num6] = GameMain.Instance.CharacterMgr.GetMaid(num6);
+					}
 				}
 			}
 		}
-		IL_99B:
+		IL_AF3:
 		if (this.m_PresetCopyToDummyChara != null)
 		{
 			NDebug.Assert(this.m_PresetCopyToDummyChara.Length <= this.m_listDummyAnimChara.Count<GameObject>(), "PresetCopyToDummyChara は listDummyAnimChara の数以下である必要があります。");
-			for (int num6 = 0; num6 < this.m_PresetCopyToDummyChara.Length; num6++)
+			for (int num7 = 0; num7 < this.m_PresetCopyToDummyChara.Length; num7++)
 			{
-				int num7 = this.m_PresetCopyToDummyChara[num6];
-				if (num7 != num6)
+				int num8 = this.m_PresetCopyToDummyChara[num7];
+				if (num8 != num7)
 				{
-					Maid maid3 = GameMain.Instance.CharacterMgr.GetMaid(num7);
+					Maid maid3 = GameMain.Instance.CharacterMgr.GetMaid(num8);
 					if (maid3)
 					{
-						byte[] buffer = GameMain.Instance.CharacterMgr.PresetSaveNotWriteFile(maid3, CharacterMgr.PresetType.All);
-						BinaryReader binaryReader = new BinaryReader(new MemoryStream(buffer));
-						CharacterMgr.Preset f_prest = GameMain.Instance.CharacterMgr.PresetLoad(binaryReader, string.Empty);
-						binaryReader.Close();
-						Maid maidDest = GameMain.Instance.CharacterMgr.GetMaid(num6);
+						byte[] buffer2 = GameMain.Instance.CharacterMgr.PresetSaveNotWriteFile(maid3, CharacterMgr.PresetType.All);
+						BinaryReader binaryReader2 = new BinaryReader(new MemoryStream(buffer2));
+						CharacterMgr.Preset f_prest = GameMain.Instance.CharacterMgr.PresetLoad(binaryReader2, string.Empty);
+						binaryReader2.Close();
+						Maid maidDest = GameMain.Instance.CharacterMgr.GetMaid(num7);
 						if (maidDest != null && this.m_listTempMaid.Find((Maid m) => m == maidDest) != null)
 						{
 							GameMain.Instance.CharacterMgr.PresetSet(maidDest, f_prest);
@@ -303,9 +340,9 @@ public class DanceMain : MonoBehaviour
 			}
 		}
 		this.m_KuchipakuAudioStartTimeAtMaid = new float[this.m_listDummyAnimChara.Count<GameObject>()];
-		for (int num8 = 0; num8 < this.m_KuchipakuAudioStartTimeAtMaid.Length; num8++)
+		for (int num9 = 0; num9 < this.m_KuchipakuAudioStartTimeAtMaid.Length; num9++)
 		{
-			this.m_KuchipakuAudioStartTimeAtMaid[num8] = 0f;
+			this.m_KuchipakuAudioStartTimeAtMaid[num9] = 0f;
 		}
 	}
 

+ 31 - 6
Assembly-CSharp/DanceSelect.cs

@@ -127,22 +127,47 @@ public class DanceSelect : WfScreenChildren
 								}
 							}
 							string cellAsString5 = csvParser.GetCellAsString(num++, j);
-							if (cellAsString5 == "ライブステージ")
+							if (cellAsString5 != null)
 							{
-								danceData.bgType = DanceData.BgType.LiveStage;
-							}
-							else
-							{
-								danceData.bgType = ((!(cellAsString5 == "劇場")) ? DanceData.BgType.PoleDance : DanceData.BgType.Theater);
+								if (!(cellAsString5 == "ライフステージ"))
+								{
+									if (!(cellAsString5 == "劇場"))
+									{
+										if (!(cellAsString5 == "ポールダンス"))
+										{
+											if (cellAsString5 == "教室")
+											{
+												danceData.bgType = DanceData.BgType.ClassRoom;
+											}
+										}
+										else
+										{
+											danceData.bgType = DanceData.BgType.PoleDance;
+										}
+									}
+									else
+									{
+										danceData.bgType = DanceData.BgType.Theater;
+									}
+								}
+								else
+								{
+									danceData.bgType = DanceData.BgType.LiveStage;
+								}
 							}
+							IL_4B7:
 							danceData.InitialPlayable = csvParser.IsCellToExistData(num++, j);
 							danceData.IsPlayable = danceData.InitialPlayable;
 							danceData.RhythmGameCorrespond = (csvParser.GetCellAsString(num++, j) == "◯");
 							danceData.SubtitleSheetName = csvParser.GetCellAsString(num++, j);
 							danceData.isShowSelectScene = (csvParser.GetCellAsString(num++, j) == "◯");
+							danceData.csvFolderName = csvParser.GetCellAsString(num++, j);
 							DanceSelect.dance_data_list_.Add(danceData);
+							goto IL_558;
+							goto IL_4B7;
 						}
 					}
+					IL_558:;
 				}
 			}
 		}

+ 11 - 4
Assembly-CSharp/DanceSelectMusicInfo.cs

@@ -49,10 +49,17 @@ public class DanceSelectMusicInfo
 		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);
-		Sprite sprite = Sprite.Create(texture2D, new Rect(0f, 0f, (float)texture2D.width, (float)texture2D.height), default(Vector2));
-		sprite.name = text;
-		this.image_sprite_.sprite2D = sprite;
-		GameMain.Instance.CharacterMgr.status.SetFlag("_ライブ背景", (data.bgType != DanceData.BgType.LiveStage) ? 0 : 1);
+		if (!texture2D)
+		{
+			texture2D = ImportCM.CreateTexture(text + ".tex");
+		}
+		if (texture2D)
+		{
+			Sprite sprite = Sprite.Create(texture2D, new Rect(0f, 0f, (float)texture2D.width, (float)texture2D.height), default(Vector2));
+			sprite.name = text;
+			this.image_sprite_.sprite2D = sprite;
+		}
+		GameMain.Instance.CharacterMgr.status.SetFlag("_ライブ背景", DanceData.DANCEBG_FLAGVAL_PAIR[data.bgType]);
 	}
 
 	public GameObject InfoUI

+ 2 - 2
Assembly-CSharp/DanceSubtitleMgr.cs

@@ -83,10 +83,10 @@ public class DanceSubtitleMgr : PartsMgrBase
 						{
 						case SubtitleDisplayManager.DisplayType.OriginalAndSubtitle:
 							action(Product.Language.Japanese);
-							action(systemLanguage);
+							action(Product.Language.English);
 							break;
 						case SubtitleDisplayManager.DisplayType.Subtitle:
-							action(systemLanguage);
+							action(Product.Language.English);
 							break;
 						case SubtitleDisplayManager.DisplayType.Original:
 							action(Product.Language.Japanese);

+ 3 - 0
Assembly-CSharp/DebugScenarioDraw.cs

@@ -9,6 +9,9 @@ public class DebugScenarioDraw : MonoBehaviour
 	[SerializeField]
 	private DebugScenarioDraw.DrawSet yotogiDrawSet;
 
+	[SerializeField]
+	private UIButton yotogiRRLockButton;
+
 	private string advText = string.Empty;
 
 	private string yotogiText = string.Empty;

+ 2 - 2
Assembly-CSharp/DescScheduleYotogi.cs

@@ -71,7 +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);
+		this.explanation_label_.GetComponent<Localize>().SetTerm("SceneDaily/スケジュール/説明/" + yotogi.name.Replace("×", "_"));
 		int num = 0;
 		for (int i = 0; i < this.condition_unit_label_.Count; i++)
 		{
@@ -79,7 +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]);
+				this.condition_unit_label_[i].Value.GetComponent<Localize>().SetTerm("SceneDaily/スケジュール/条件文/" + yotogi.condInfo[i].Replace("×", "_"));
 				num++;
 			}
 			else

+ 1 - 1
Assembly-CSharp/DeskManager.cs

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

+ 3 - 3
Assembly-CSharp/DynamicBone.cs

@@ -30,7 +30,7 @@ public class DynamicBone : MonoBehaviour
 			return false;
 		};
 		f_bw.Write("CM3D21_PHY");
-		f_bw.Write(1350);
+		f_bw.Write(1430);
 		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(1350);
+		f_bw.Write(1430);
 		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, 1350);
+				this.m_Colliders[i].Serialize(f_bw, 1430);
 			}
 		}
 		this.m_ColliderFileName = f_strFileName;

+ 1 - 1
Assembly-CSharp/DynamicSkirtBone.cs

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

+ 1 - 1
Assembly-CSharp/EditMod.cs

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

+ 1 - 1
Assembly-CSharp/EmpireLifeModeManager.cs

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

+ 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(1350);
+		brWrite.Write(1430);
 		brWrite.Write("5");
 		int num = 0;
 		for (int i = 0; i < this.m_FacilityArray.Count; i++)

+ 74 - 0
Assembly-CSharp/Fish.cs

@@ -0,0 +1,74 @@
+using System;
+using UnityEngine;
+
+public class Fish : MonoBehaviour
+{
+	public void Init(Vector3[] paths, float minTime, float maxTime, float lookTime)
+	{
+		this.itweenPath = paths;
+		this.minTime = minTime;
+		this.maxTime = maxTime;
+		this.lookTime = lookTime;
+	}
+
+	public void MovePath()
+	{
+		if (!this.isInit)
+		{
+			this.go = new GameObject("LookTarget");
+			this.go.transform.parent = base.gameObject.transform.parent;
+			this.go.layer = base.gameObject.layer;
+			this.go.transform.position = this.itweenPath[1];
+			this.isInit = true;
+		}
+		this.pathNo++;
+		if (this.pathNo > this.itweenPath.Length - 1)
+		{
+			this.pathNo = 1;
+		}
+		int num = (this.pathNo + 1 <= this.itweenPath.Length - 1) ? (this.pathNo + 1) : 1;
+		iTween.MoveTo(this.go, iTween.Hash(new object[]
+		{
+			"position",
+			this.itweenPath[num],
+			"time",
+			UnityEngine.Random.Range(this.minTime, this.maxTime),
+			"easeType",
+			"linear",
+			"isLocal",
+			true
+		}));
+		iTween.MoveTo(base.gameObject, iTween.Hash(new object[]
+		{
+			"position",
+			this.itweenPath[this.pathNo],
+			"time",
+			UnityEngine.Random.Range(this.minTime, this.maxTime),
+			"easeType",
+			"linear",
+			"oncomplete",
+			"MovePath",
+			"isLocal",
+			true
+		}));
+	}
+
+	private void Update()
+	{
+		base.transform.LookAt(this.go.transform);
+	}
+
+	private int pathNo;
+
+	private Vector3[] itweenPath;
+
+	private float minTime;
+
+	private float maxTime;
+
+	private float lookTime;
+
+	private bool isInit;
+
+	private GameObject go;
+}

+ 42 - 0
Assembly-CSharp/FishMove.cs

@@ -0,0 +1,42 @@
+using System;
+using UnityEngine;
+using wf;
+
+[RequireComponent(typeof(iTweenPath))]
+public class FishMove : MonoBehaviour
+{
+	private void Start()
+	{
+		Vector3[] path = iTweenPath.GetPath(this.PathName);
+		for (int i = 0; i < this.DuplicationObjectCount; i++)
+		{
+			GameObject childObject = UTY.GetChildObject(base.gameObject, "ObjectRoot", false);
+			GameObject gameObject = Utility.CreatePrefab(new GameObject("Fish" + i)
+			{
+				transform = 
+				{
+					parent = childObject.transform
+				}
+			}, this.CreatePrefabName, false);
+			gameObject.transform.localPosition = path[0];
+			gameObject.transform.rotation = this.FirstDirection;
+			Fish fish = gameObject.AddComponent<Fish>();
+			fish.Init(path, this.MinTime, this.MaxTime, this.LookTime);
+			fish.MovePath();
+		}
+	}
+
+	public float MinTime = 6f;
+
+	public float MaxTime = 12f;
+
+	public float LookTime = 2f;
+
+	public string PathName = "Path1";
+
+	public int DuplicationObjectCount = 1;
+
+	public string CreatePrefabName = string.Empty;
+
+	public Quaternion FirstDirection = Quaternion.identity;
+}

+ 1 - 1
Assembly-CSharp/FreeModeItemLifeMode.cs

@@ -98,7 +98,7 @@ public class FreeModeItemLifeMode : AbstractFreeModeItem
 	{
 		get
 		{
-			return "SceneFreeModeSelect/タイトル/" + this.m_Title;
+			return "SceneFreeModeSelect/タイトル/" + this.m_Title.Replace("×", "_");
 		}
 	}
 

+ 4 - 4
Assembly-CSharp/FreeModeItemVip.cs

@@ -58,7 +58,7 @@ public class FreeModeItemVip : AbstractFreeModeItem
 	{
 		get
 		{
-			return "SceneDaily/スケジュール/項目/" + this.vip_data_.name;
+			return "SceneDaily/スケジュール/項目/" + this.vip_data_.name.Replace("×", "_");
 		}
 	}
 
@@ -74,7 +74,7 @@ public class FreeModeItemVip : AbstractFreeModeItem
 	{
 		get
 		{
-			return "SceneDaily/スケジュール/条件文/" + this.vip_data_.name;
+			return "SceneDaily/スケジュール/条件文/" + this.vip_data_.name.Replace("×", "_");
 		}
 	}
 
@@ -91,9 +91,9 @@ public class FreeModeItemVip : AbstractFreeModeItem
 		get
 		{
 			List<string> list = new List<string>();
-			foreach (string str in this.vip_data_.condInfo)
+			foreach (string text in this.vip_data_.condInfo)
 			{
-				list.Add("SceneDaily/スケジュール/条件文/" + str);
+				list.Add("SceneDaily/スケジュール/条件文/" + text.Replace("×", "_"));
 			}
 			return list.ToArray();
 		}

+ 1 - 8
Assembly-CSharp/FullBodyIKCtrl.cs

@@ -359,14 +359,7 @@ public class FullBodyIKCtrl : MonoBehaviour
 	{
 		this.IKUpdate();
 		this.TgtBody.AutoTwist();
-		for (int i = 0; i < this.TgtBody.goSlot.Count; i++)
-		{
-			if (this.TgtBody.goSlot[i].obj != null)
-			{
-				this.TgtBody.goSlot[i].CopyTrans();
-			}
-			this.TgtBody.goSlot[i].Update();
-		}
+		this.TgtBody.SkinMeshUpdate();
 	}
 
 	public Transform GetIKBone(FullBodyIKCtrl.IKBoneType boneType)

+ 2 - 2
Assembly-CSharp/GameMain.cs

@@ -679,7 +679,7 @@ public class GameMain : MonoSingleton<GameMain>
 		serializeHeader.strComment = f_strComment;
 		serializeHeader.productTypeID = (int)Product.type;
 		binaryWriter.Write("COM3D2_SAVE");
-		binaryWriter.Write(1350);
+		binaryWriter.Write(1430);
 		this.SerializeWriteHeader(binaryWriter, serializeHeader);
 		binaryWriter.Write("bookmark_kk_01");
 		GameMain.BinaryBookmark binaryBookmark = new GameMain.BinaryBookmark(binaryWriter);
@@ -799,7 +799,7 @@ public class GameMain : MonoSingleton<GameMain>
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("COM3D2_SAVE");
-		binaryWriter.Write(1350);
+		binaryWriter.Write(1430);
 		this.SerializeWriteHeader(binaryWriter, saveDataHeader);
 		binaryWriter.Write(array, (int)saveDataHeader.lHeaderSize, (int)((long)array.Length - saveDataHeader.lHeaderSize));
 		File.WriteAllBytes(path, memoryStream.ToArray());

+ 21 - 4
Assembly-CSharp/GameModeManager.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.IO;
+using I2.Loc;
 using UnityEngine;
 
 public static class GameModeManager
@@ -31,7 +32,7 @@ public static class GameModeManager
 	public static bool Serialize(BinaryWriter brWrite)
 	{
 		brWrite.Write("CM3D21_GAME_MODE_MGR");
-		brWrite.Write(1350);
+		brWrite.Write(1430);
 		brWrite.Write(1);
 		brWrite.Write((int)GameModeManager.m_NowGameModeType);
 		return true;
@@ -77,11 +78,11 @@ public static class GameModeManager
 	{
 		{
 			GameModeManager.Type.Normal,
-			new GameModeManager.Data(GameModeManager.Type.Normal, "main_banner_um", "従来のモード\nメイドのスケジュールを設定することで、仕事、育成、夜伽を行う事のできる従来のモード\u3000")
+			new GameModeManager.Data(GameModeManager.Type.Normal, "main_banner_um", "従来のモード\nメイドのスケジュールを設定することで、仕事、育成、夜伽を行う事のできる従来のモード\u3000", "SceneDaily/モード説明1")
 		},
 		{
 			GameModeManager.Type.LifeMode,
-			new GameModeManager.Data(GameModeManager.Type.LifeMode, "main_banner_elm", "ライフモード\nメイド達が普段どのような風に\n生活、仕事をしているのかを見ることが出来るモード\n普段は見ることのできない一面や、メイド同士の珍しいやり取りが見れるかも?")
+			new GameModeManager.Data(GameModeManager.Type.LifeMode, "main_banner_elm", "ライフモード\nメイド達が普段どのような風に\n生活、仕事をしているのかを見ることが出来るモード\n普段は見ることのできない一面や、メイド同士の珍しいやり取りが見れるかも?", "SceneDaily/モード説明2")
 		}
 	};
 
@@ -101,10 +102,24 @@ public static class GameModeManager
 
 	public class Data
 	{
-		public Data(GameModeManager.Type mode, string strBannerImageName, string strDescription)
+		public Data(GameModeManager.Type mode, string strBannerImageName, string strDescription, string termDescription)
 		{
 			this.strBannerImageName = strBannerImageName;
 			this.strDescription = strDescription;
+			this.termDescription = termDescription;
+			if (Product.supportMultiLanguage)
+			{
+				string term = string.Empty;
+				if (mode == GameModeManager.Type.Normal)
+				{
+					term = "SceneDaily/スプライト/モードバナー_通常";
+				}
+				else
+				{
+					term = "SceneDaily/スプライト/モードバナー_ライフモード";
+				}
+				this.strBannerImageName = LocalizationManager.GetTranslation(term, true, 0, true, false, null, Product.EnumConvert.ToI2LocalizeLanguageName(Product.defaultLanguage));
+			}
 		}
 
 		public readonly GameModeManager.Type gameMode;
@@ -112,5 +127,7 @@ public static class GameModeManager
 		public readonly string strBannerImageName;
 
 		public readonly string strDescription;
+
+		public readonly string termDescription;
 	}
 }

+ 35 - 59
Assembly-CSharp/GameUty.cs

@@ -3,7 +3,6 @@ using System.Collections.Generic;
 using System.IO;
 using System.Linq;
 using System.Text;
-using System.Text.RegularExpressions;
 using I2.Loc;
 using UnityEngine;
 using wf;
@@ -308,9 +307,9 @@ public class GameUty
 					{
 						GameUty.ExistCsvPathList.Add(text30);
 					}
-					for (int num15 = 2; num15 <= check_ver_no; num15++)
+					for (int num12 = 2; num12 <= check_ver_no; num12++)
 					{
-						AddFolderOrArchive(text31 + "_" + num15);
+						AddFolderOrArchive(text31 + "_" + num12);
 					}
 				}
 			}
@@ -331,7 +330,7 @@ public class GameUty
 					{
 						GameUty.ExistCsvPathList.Add(text30);
 					}
-					for (int num15 = 2; num15 <= check_ver_no; num15++)
+					for (int num12 = 2; num12 <= check_ver_no; num12++)
 					{
 						AddFolderOrArchive(string.Concat(new object[]
 						{
@@ -339,31 +338,7 @@ public class GameUty
 							"_",
 							text30,
 							"_",
-							num15
-						}));
-					}
-				}
-			}
-		};
-		Action<string> action3 = delegate(string name)
-		{
-			foreach (string text30 in GameUty.PathList)
-			{
-				if (AddFolderOrArchive(name + "_" + text30))
-				{
-					if (name == "csv")
-					{
-						GameUty.ExistCsvPathList.Add(text30);
-					}
-					for (int num15 = 2; num15 <= check_ver_no; num15++)
-					{
-						AddFolderOrArchive(string.Concat(new object[]
-						{
-							name,
-							"_",
-							text30,
-							"_",
-							num15
+							num12
 						}));
 					}
 				}
@@ -418,9 +393,9 @@ public class GameUty
 					}
 					if (flag)
 					{
-						for (int i2 = 2; i2 <= check_ver_no; i2++)
+						for (int i = 2; i <= check_ver_no; i++)
 						{
-							AddFolderOrArchive(text3 + "_" + i2);
+							AddFolderOrArchive(text3 + "_" + i);
 						}
 					}
 				}
@@ -680,9 +655,8 @@ public class GameUty
 			AddFolderOrArchive("voice");
 			for (int num6 = 0; num6 < 25; num6++)
 			{
-				string arg = "voice";
-				string arg2 = arg + "_" + (char)(97 + num6);
-				AddFolderOrArchive(arg2);
+				string arg = "voice" + "_" + ((char)(97 + num6)).ToString();
+				AddFolderOrArchive(arg);
 			}
 			foreach (string text25 in GameUty.PathList)
 			{
@@ -704,8 +678,8 @@ public class GameUty
 			}
 			for (int num8 = 2; num8 <= check_ver_no; num8++)
 			{
-				string arg3 = "voice";
-				AddFolderOrArchive(arg3 + num8);
+				string arg2 = "voice";
+				AddFolderOrArchive(arg2 + num8);
 			}
 			string text27 = "parts";
 			NDebug.Assert(AddFolderOrArchive(text27), str + text27);
@@ -727,7 +701,9 @@ public class GameUty
 				}
 			}
 			AddFolderOrArchive("parts2");
-			Debug.Log("■■■■■■■■■■■■■■■■■■■■" + stopWatch.Stop().ToString() + " ms");
+			string str4 = "■■■■■■■■■■■■■■■■■■■■";
+			int num10 = stopWatch.Stop();
+			Debug.Log(str4 + num10.ToString() + " ms");
 		}
 		GameUty.m_FileSystem.AddAutoPathForAllFolder();
 		if (Product.isPublic && !GameUty.m_FileSystem.IsExistentFile("21C399027026.dat"))
@@ -738,11 +714,12 @@ public class GameUty
 		}
 		GameUty.BgFiles = new Dictionary<string, AFileSystemBase>();
 		string[] list = GameUty.m_FileSystem.GetList("bg", AFileSystemBase.ListType.AllFile);
-		if (list != null && 0 < list.Length)
+		if (list != null && list.Length != 0)
 		{
-			foreach (string path in list)
+			string[] array = list;
+			for (int num10 = 0; num10 < array.Length; num10++)
 			{
-				string fileName = Path.GetFileName(path);
+				string fileName = Path.GetFileName(array[num10]);
 				if (!(Path.GetExtension(fileName) != ".asset_bg") && !GameUty.BgFiles.ContainsKey(fileName))
 				{
 					GameUty.BgFiles.Add(fileName, GameUty.m_FileSystem);
@@ -752,30 +729,31 @@ public class GameUty
 		if (Product.supportMultiLanguage)
 		{
 			list = GameUty.m_FileSystem.GetList("language", AFileSystemBase.ListType.AllFile);
-			if (list != null && 0 < list.Length)
+			if (list != null && list.Length != 0)
 			{
-				foreach (string path2 in list)
+				string[] array = list;
+				for (int num10 = 0; num10 < array.Length; num10++)
 				{
-					string fileName2 = Path.GetFileName(path2);
+					string fileName2 = Path.GetFileName(array[num10]);
 					if (!(Path.GetExtension(fileName2) != ".asset_language"))
 					{
 						using (AFileBase afileBase = GameUty.m_FileSystem.FileOpen(fileName2))
 						{
 							AssetBundle assetBundle = AssetBundle.LoadFromMemory(afileBase.ReadAll());
-							LanguageSource languageSource = UnityEngine.Object.Instantiate<LanguageSource>(assetBundle.LoadAllAssets<GameObject>()[0].GetComponent<LanguageSource>());
+							Component component = 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"));
+							component.transform.SetParent(GameMain.Instance.transform.Find("Language"));
 							assetBundle.Unload(true);
 						}
 					}
 				}
 			}
-			foreach (LanguageSource languageSource2 in LocalizationManager.Sources)
+			foreach (LanguageSource languageSource in LocalizationManager.Sources)
 			{
-				languageSource2.LoadAllLanguages(false);
+				languageSource.LoadAllLanguages(false);
 			}
 		}
 		if (Directory.Exists(text + "Mod"))
@@ -783,8 +761,7 @@ public class GameUty
 			GameUty.m_ModFileSystem = new FileSystemWindows();
 			GameUty.m_ModFileSystem.SetBaseDirectory(text);
 			GameUty.m_ModFileSystem.AddFolder("Mod");
-			string[] list2 = GameUty.m_ModFileSystem.GetList(string.Empty, AFileSystemBase.ListType.AllFolder);
-			foreach (string text29 in list2)
+			foreach (string text29 in GameUty.m_ModFileSystem.GetList(string.Empty, AFileSystemBase.ListType.AllFolder))
 			{
 				if (!GameUty.m_ModFileSystem.AddAutoPath(text29))
 				{
@@ -793,16 +770,15 @@ public class GameUty
 			}
 		}
 		string[] fileListAtExtension = GameUty.m_FileSystem.GetFileListAtExtension(".menu");
-		List<string> list3 = new List<string>();
-		foreach (string path3 in fileListAtExtension)
+		List<string> list2 = new List<string>();
+		foreach (string path in fileListAtExtension)
 		{
-			list3.Add(Path.GetFileName(path3));
+			list2.Add(Path.GetFileName(path));
 		}
-		GameUty.m_aryMenuFiles = list3.ToArray();
+		GameUty.m_aryMenuFiles = list2.ToArray();
 		if (GameUty.m_ModFileSystem != null)
 		{
-			string[] list4 = GameUty.m_ModFileSystem.GetList(string.Empty, AFileSystemBase.ListType.AllFile);
-			GameUty.m_aryModOnlysMenuFiles = Array.FindAll<string>(list4, (string i) => new Regex(".*\\.menu$").IsMatch(i));
+			GameUty.m_aryModOnlysMenuFiles = GameUty.m_ModFileSystem.GetFileListAtExtension(".menu");
 			GameUty.m_aryMenuFiles = GameUty.m_aryMenuFiles.Concat(GameUty.m_aryModOnlysMenuFiles).ToArray<string>();
 		}
 		if (GameUty.m_aryModOnlysMenuFiles != null && GameUty.m_aryModOnlysMenuFiles.Length != 0)
@@ -814,9 +790,9 @@ public class GameUty
 		{
 			string[] menuFiles = GameUty.MenuFiles;
 			GameUty.rid_menu_dic_ = new Dictionary<int, string>();
-			for (int num14 = 0; num14 < menuFiles.Length; num14++)
+			for (int num11 = 0; num11 < menuFiles.Length; num11++)
 			{
-				string fileName3 = Path.GetFileName(menuFiles[num14]);
+				string fileName3 = Path.GetFileName(menuFiles[num11]);
 				int hashCode = fileName3.ToLower().GetHashCode();
 				if (!GameUty.rid_menu_dic_.ContainsKey(hashCode))
 				{
@@ -1404,14 +1380,14 @@ public class GameUty
 
 	public static string GetBuildVersionText()
 	{
-		int num = 1350;
+		int num = 1430;
 		return (num >= 1000) ? ((float)num / 1000f).ToString("F2") : ((float)num / 100f).ToString("F2");
 	}
 
 	public static string GetGameVersionText()
 	{
 		string text = "COM3D2x64.exe";
-		int num = 1350;
+		int num = 1430;
 		string path = UTY.gameProjectPath + "\\update.lst";
 		string[] array = new string[0];
 		if (File.Exists(path))

+ 2 - 2
Assembly-CSharp/HandSignShortcut.cs

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

+ 6 - 4
Assembly-CSharp/I2/Loc/LanguageSource.cs

@@ -587,7 +587,7 @@ namespace I2.Loc
 						}
 						else if (UpdateMode == eSpreadsheetUpdateMode.AddNewTerms)
 						{
-							goto IL_4F2;
+							goto IL_506;
 						}
 						if (num2 > 0)
 						{
@@ -616,7 +616,9 @@ namespace I2.Loc
 									}
 									if (callBackSetTranslationPrev != null)
 									{
-										callBackSetTranslationPrev(this.mLanguages[num8], ref text6, ref text5);
+										string term = termData2.Term;
+										callBackSetTranslationPrev(this.mLanguages[num8], ref term, ref text6, ref text5);
+										termData2.Term = term;
 									}
 									termData2.SetTranslation(num8, text6, text5);
 								}
@@ -624,7 +626,7 @@ namespace I2.Loc
 							num7++;
 						}
 					}
-					IL_4F2:
+					IL_506:
 					k++;
 				}
 				return string.Empty;
@@ -1639,7 +1641,7 @@ namespace I2.Loc
 
 		public string mTerm_AppName;
 
-		public delegate void CsvSetTranslationPrevDelegate(LanguageData setTargetLanguage, ref string setTranslation, ref string setSpecialization);
+		public delegate void CsvSetTranslationPrevDelegate(LanguageData setTargetLanguage, ref string termKey, ref string setTranslation, ref string setSpecialization);
 
 		public enum eGoogleUpdateFrequency
 		{

+ 73 - 0
Assembly-CSharp/ICODES/STUDIO/WWebView/InputTools.cs

@@ -0,0 +1,73 @@
+using System;
+using UnityEngine;
+
+namespace ICODES.STUDIO.WWebView
+{
+	public static class InputTools
+	{
+		public static bool GetMouseState(ref int state, ref int key)
+		{
+			if (InputTools.DidMouseMove())
+			{
+				state = 0;
+				return true;
+			}
+			for (key = 0; key < 3; key++)
+			{
+				if (InputTools.DidMouseClick(ref state, ref key))
+				{
+					return true;
+				}
+			}
+			if (InputTools.DidMouseWheel(ref key))
+			{
+				state = 3;
+				return true;
+			}
+			return false;
+		}
+
+		public static bool DidMouseClick(ref int state, ref int key)
+		{
+			if (Input.GetMouseButtonDown(key))
+			{
+				state = 1;
+				return true;
+			}
+			if (Input.GetMouseButtonUp(key))
+			{
+				state = 2;
+				return true;
+			}
+			return false;
+		}
+
+		public static bool DidMouseMove()
+		{
+			return Input.GetAxis("Mouse X") != 0f || Input.GetAxis("Mouse Y") != 0f;
+		}
+
+		public static bool DidMouseWheel(ref int key)
+		{
+			if (Input.GetAxis("Mouse ScrollWheel") > 0f)
+			{
+				key = 1;
+				return true;
+			}
+			if (Input.GetAxis("Mouse ScrollWheel") < 0f)
+			{
+				key = -1;
+				return true;
+			}
+			return false;
+		}
+
+		private enum Event
+		{
+			MouseMove,
+			MouseDown,
+			MouseUp,
+			MouseWheel
+		}
+	}
+}

+ 42 - 0
Assembly-CSharp/ICODES/STUDIO/WWebView/SimpleGazeCursor.cs

@@ -0,0 +1,42 @@
+using System;
+using UnityEngine;
+
+namespace ICODES.STUDIO.WWebView
+{
+	public class SimpleGazeCursor : MonoBehaviour
+	{
+		protected void Start()
+		{
+			this.cursorInstance = UnityEngine.Object.Instantiate<GameObject>(this.cursorPrefab);
+		}
+
+		protected void Update()
+		{
+			this.UpdateCursor();
+		}
+
+		protected void UpdateCursor()
+		{
+			Ray ray = new Ray(this.viewCamera.transform.position, this.viewCamera.transform.rotation * Vector3.forward);
+			RaycastHit raycastHit;
+			if (Physics.Raycast(ray, out raycastHit, float.PositiveInfinity))
+			{
+				this.cursorInstance.transform.position = raycastHit.point;
+				this.cursorInstance.transform.rotation = Quaternion.FromToRotation(Vector3.up, raycastHit.normal);
+			}
+			else
+			{
+				this.cursorInstance.transform.position = ray.origin + ray.direction.normalized * this.maxCursorDistance;
+				this.cursorInstance.transform.rotation = Quaternion.FromToRotation(Vector3.up, -ray.direction);
+			}
+		}
+
+		public Camera viewCamera;
+
+		public GameObject cursorPrefab;
+
+		public float maxCursorDistance = 30f;
+
+		private GameObject cursorInstance;
+	}
+}

+ 382 - 0
Assembly-CSharp/ICODES/STUDIO/WWebView/WWebView.cs

@@ -0,0 +1,382 @@
+using System;
+using System.Collections;
+using System.Diagnostics;
+using System.IO;
+using UnityEngine;
+
+namespace ICODES.STUDIO.WWebView
+{
+	public class WWebView : MonoBehaviour
+	{
+		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
+		public event WWebView.ActionStartNavigation OnStartNavigation;
+
+		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
+		public event WWebView.ActionNavigationCompleted OnNavigationCompleted;
+
+		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
+		public event WWebView.ActionNavigationFailed OnNavigationFailed;
+
+		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
+		public event WWebView.ActionReceiveMessage OnReceiveMessage;
+
+		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
+		public event WWebView.ActionEvaluateJavaScript OnEvaluateJavaScript;
+
+		[DebuggerBrowsable(DebuggerBrowsableState.Never)]
+		public event WWebView.ActionClose OnClose;
+
+		private void Start()
+		{
+			if (!string.IsNullOrEmpty(this.url))
+			{
+				this.Navigate(this.url);
+			}
+		}
+
+		private void OnDestroy()
+		{
+			this.Destroy();
+		}
+
+		public void Initialize(Vector4 position, Vector2 size)
+		{
+			this.position = position;
+			this.size = size;
+			if (!WWebViewSystem.Instance.HoloLensVR)
+			{
+				this.Setup();
+			}
+		}
+
+		private void Setup()
+		{
+			if (!this.setup)
+			{
+				GameObject gameObject = new GameObject(Guid.NewGuid().ToString());
+				this.listener = gameObject.AddComponent<WWebViewListener>();
+				gameObject.transform.parent = base.transform;
+				this.listener.WebView = this;
+				WWebViewPlugin.Init(this.listener.Name, (int)this.position.y, (int)this.position.x, (int)this.position.w, (int)this.position.z, (int)this.size.x, (int)this.size.y);
+				this.setup = true;
+			}
+		}
+
+		public void Destroy()
+		{
+			if (this.setup)
+			{
+				WWebViewPlugin.Destroy(this.listener.Name);
+				UnityEngine.Object.Destroy(this.listener.gameObject);
+				this.setup = false;
+			}
+		}
+
+		public void Navigate(string url)
+		{
+			this.Setup();
+			WWebViewPlugin.Load(this.listener.Name, url);
+		}
+
+		public void NavigateString(string html)
+		{
+			this.Setup();
+			WWebViewPlugin.LoadHTMLString(this.listener.Name, html, string.Empty);
+		}
+
+		public void NavigateFile(string file)
+		{
+			this.Setup();
+			string text = Path.Combine("file://" + Application.streamingAssetsPath, file);
+			WWebViewPlugin.Load(this.listener.Name, text);
+		}
+
+		public void SetHeaderField(string key, string value)
+		{
+			this.Setup();
+			WWebViewPlugin.SetHeaderField(this.listener.Name, key, value);
+		}
+
+		public void SetWindowLayout(int left, int top, int right, int bottom, int width, int height)
+		{
+			this.Setup();
+			WWebViewPlugin.ChangeInsets(this.listener.Name, top, left, bottom, right, width, height);
+		}
+
+		public void AddUrlScheme(string scheme)
+		{
+			this.Setup();
+			WWebViewPlugin.AddUrlScheme(this.listener.Name, scheme);
+		}
+
+		public void RemoveUrlScheme(string scheme)
+		{
+			this.Setup();
+			WWebViewPlugin.RemoveUrlScheme(this.listener.Name, scheme);
+		}
+
+		public void SetUserAgent(string userAgent)
+		{
+			this.Setup();
+			WWebViewPlugin.SetUserAgent(userAgent);
+		}
+
+		public string GetUserAgent()
+		{
+			this.Setup();
+			return WWebViewPlugin.GetUserAgent(this.listener.Name);
+		}
+
+		public void ClearCache()
+		{
+			this.Setup();
+			WWebViewPlugin.CleanCache(this.listener.Name);
+		}
+
+		public void ClearCookies()
+		{
+			this.Setup();
+			WWebViewPlugin.ClearCookies();
+		}
+
+		public void SetCookie(string url, string cookie)
+		{
+			this.Setup();
+			WWebViewPlugin.SetCookie(url, cookie);
+		}
+
+		public string GetCookie(string url, string key)
+		{
+			this.Setup();
+			return WWebViewPlugin.GetCookie(url, key);
+		}
+
+		public void ShowScroll(bool show)
+		{
+			this.Setup();
+			WWebViewPlugin.ShowScroll(this.listener.Name, show);
+		}
+
+		public void ShowScrollX(bool show)
+		{
+			this.Setup();
+			WWebViewPlugin.ShowScrollX(this.listener.Name, show);
+		}
+
+		public void ShowScrollY(string name, bool show)
+		{
+			this.Setup();
+			WWebViewPlugin.ShowScrollY(this.listener.Name, show);
+		}
+
+		public void Refresh()
+		{
+			this.Setup();
+			WWebViewPlugin.Reload(this.listener.Name);
+		}
+
+		public void AddJavaScript(string script)
+		{
+			this.Setup();
+			WWebViewPlugin.AddJavaScript(this.listener.Name, script);
+		}
+
+		public void EvaluateJavaScript(string script)
+		{
+			this.Setup();
+			WWebViewPlugin.EvaluatingJavaScript(this.listener.Name, script);
+		}
+
+		public float Alpha
+		{
+			get
+			{
+				this.Setup();
+				return WWebViewPlugin.GetAlpha(this.listener.Name);
+			}
+			set
+			{
+				this.Setup();
+				WWebViewPlugin.SetAlpha(this.listener.Name, value);
+			}
+		}
+
+		public bool CanGoBack
+		{
+			get
+			{
+				this.Setup();
+				return WWebViewPlugin.CanGoBack(this.listener.Name);
+			}
+		}
+
+		public bool CanGoForward
+		{
+			get
+			{
+				this.Setup();
+				return WWebViewPlugin.CanGoForward(this.listener.Name);
+			}
+		}
+
+		public void GoBack()
+		{
+			this.Setup();
+			WWebViewPlugin.GoBack(this.listener.Name);
+		}
+
+		public void GoForward()
+		{
+			this.Setup();
+			WWebViewPlugin.GoForward(this.listener.Name);
+		}
+
+		public void Stop()
+		{
+			this.Setup();
+			WWebViewPlugin.Stop(this.listener.Name);
+		}
+
+		public void Show()
+		{
+			this.Setup();
+			WWebViewPlugin.Show(this.listener.Name, false, 0, 0f);
+		}
+
+		public void Hide()
+		{
+			this.Setup();
+			WWebViewPlugin.Hide(this.listener.Name, false, 0, 0f);
+		}
+
+		public void SetTexture(Texture2D texture)
+		{
+			this.Setup();
+			WWebViewPlugin.SetTexture(this.listener.Name, texture);
+			base.StartCoroutine("OnRenderTexture", WWebViewPlugin.GetRenderEventFunc());
+		}
+
+		private IEnumerator OnRenderTexture(IntPtr handler)
+		{
+			for (;;)
+			{
+				yield return new WaitForEndOfFrame();
+				GL.IssuePluginEvent(handler, 0);
+			}
+			yield break;
+		}
+
+		public void InputEvent(int state, int key, int x, int y)
+		{
+			this.Setup();
+			WWebViewPlugin.InputEvent(this.listener.Name, state, key, x, y);
+		}
+
+		public int GetActualWidth()
+		{
+			this.Setup();
+			return WWebViewPlugin.GetActualWidth(this.listener.Name);
+		}
+
+		public int GetActualHeight()
+		{
+			this.Setup();
+			return WWebViewPlugin.GetActualHeight(this.listener.Name);
+		}
+
+		public void EnableContextMenu(bool enable)
+		{
+			this.Setup();
+			WWebViewPlugin.EnableContextMenu(this.listener.Name, enable);
+		}
+
+		public void SetZoom(int factor)
+		{
+			this.Setup();
+			WWebViewPlugin.SetZoom(this.listener.Name, factor);
+		}
+
+		internal void InternalOnStartNavigation(string url)
+		{
+			if (this.OnStartNavigation != null)
+			{
+				this.OnStartNavigation(this, url);
+			}
+		}
+
+		internal void InternalOnNavigationCompleted(string data)
+		{
+			if (this.OnNavigationCompleted != null)
+			{
+				this.OnNavigationCompleted(this, data);
+			}
+		}
+
+		internal void InternalOnNavigationFailed(int code, string url)
+		{
+			if (this.OnNavigationFailed != null)
+			{
+				this.OnNavigationFailed(this, code, url);
+			}
+		}
+
+		internal void InternalOnReceiveMessage(string message)
+		{
+			if (this.OnReceiveMessage != null)
+			{
+				this.OnReceiveMessage(this, message);
+			}
+		}
+
+		internal void InternalOnEvaluateJavaScript(string result)
+		{
+			if (this.OnEvaluateJavaScript != null)
+			{
+				this.OnEvaluateJavaScript(this, result);
+			}
+		}
+
+		internal void InternalOnClose()
+		{
+			if (this.OnClose != null)
+			{
+				if (this.OnClose(this))
+				{
+					UnityEngine.Object.Destroy(this);
+				}
+			}
+			else
+			{
+				UnityEngine.Object.Destroy(this);
+			}
+		}
+
+		private WWebViewListener listener;
+
+		private bool setup;
+
+		[Tooltip("Initial URL to load.\nTo change at runtime use Navigate to load a page.")]
+		[SerializeField]
+		private string url;
+
+		[Tooltip("Initial position.\nTo change at runtime use SetWindowLayout.")]
+		[SerializeField]
+		private Vector4 position = Vector4.zero;
+
+		[Tooltip("Initial size.\nTo change at runtime use SetWindowLayout.")]
+		[SerializeField]
+		private Vector2 size = Vector2.zero;
+
+		public delegate void ActionStartNavigation(WWebView webView, string url);
+
+		public delegate void ActionNavigationCompleted(WWebView webView, string data);
+
+		public delegate void ActionNavigationFailed(WWebView webView, int code, string url);
+
+		public delegate void ActionReceiveMessage(WWebView webView, string message);
+
+		public delegate void ActionEvaluateJavaScript(WWebView webView, string result);
+
+		public delegate bool ActionClose(WWebView webView);
+	}
+}

+ 53 - 0
Assembly-CSharp/ICODES/STUDIO/WWebView/WWebViewListener.cs

@@ -0,0 +1,53 @@
+using System;
+using UnityEngine;
+
+namespace ICODES.STUDIO.WWebView
+{
+	public class WWebViewListener : MonoBehaviour
+	{
+		public WWebView WebView { get; set; }
+
+		public string Name
+		{
+			get
+			{
+				return base.gameObject.name;
+			}
+		}
+
+		private void WebViewDone(string message)
+		{
+			this.WebView.InternalOnClose();
+		}
+
+		private void LoadBegin(string url)
+		{
+			this.WebView.InternalOnStartNavigation(url);
+		}
+
+		private void LoadComplete(string message)
+		{
+			this.WebView.InternalOnNavigationCompleted(message);
+		}
+
+		private void EvalJavaScriptFinished(string result)
+		{
+			this.WebView.InternalOnEvaluateJavaScript(result);
+		}
+
+		private void ReceivedMessage(string result)
+		{
+			this.WebView.InternalOnReceiveMessage(result);
+		}
+
+		[Serializable]
+		public class WWebViewResultPayload
+		{
+			public string identifier;
+
+			public string resultCode;
+
+			public string data;
+		}
+	}
+}

+ 518 - 0
Assembly-CSharp/ICODES/STUDIO/WWebView/WWebViewPlugin.cs

@@ -0,0 +1,518 @@
+using System;
+using System.Runtime.InteropServices;
+using UnityEngine;
+using Win32;
+
+namespace ICODES.STUDIO.WWebView
+{
+	public sealed class WWebViewPlugin
+	{
+		public static bool Init(string name, int top, int left, int bottom, int right, int width, int height)
+		{
+			if (!WWebViewPlugin.initialize)
+			{
+				IntPtr moduleHandle = Kernel32.GetModuleHandle(null);
+				if (moduleHandle == IntPtr.Zero)
+				{
+					Debug.LogError("Can't find process module.");
+					return false;
+				}
+				IntPtr intPtr = WWebViewWin32.FindUnityPlayerWindow();
+				if (intPtr == IntPtr.Zero)
+				{
+					Debug.LogError("Can't find Unity player window handle.");
+					return false;
+				}
+				WWebViewWin32.Initialize(moduleHandle, IntPtr.Zero, null, 0, intPtr, Screen.width, Screen.height, 11000);
+				WWebViewSystem.Instance.Initialize();
+				WWebViewPlugin.documentComplete = new WWebViewWin32.ActionDocumentComplete(WWebViewPlugin.OnDocumentComplete);
+				WWebViewPlugin.beforeNavigate = new WWebViewWin32.ActionBeforeNavigate(WWebViewPlugin.OnBeforeNavigate);
+				WWebViewPlugin.windowClosing = new WWebViewWin32.ActionWindowClosing(WWebViewPlugin.OnWindowClosing);
+				WWebViewPlugin.titleChange = new WWebViewWin32.ActionTitleChange(WWebViewPlugin.OnTitleChange);
+				WWebViewPlugin.newWindow = new WWebViewWin32.ActionNewWindow(WWebViewPlugin.OnNewWindow);
+				WWebViewPlugin.navigateComplete = new WWebViewWin32.ActionNavigateComplete(WWebViewPlugin.OnNavigateComplete);
+				WWebViewPlugin.initialize = true;
+			}
+			WWebViewWin32.Create(name, WWebViewPlugin.documentComplete, WWebViewPlugin.beforeNavigate, WWebViewPlugin.windowClosing, WWebViewPlugin.titleChange, WWebViewPlugin.newWindow, WWebViewPlugin.navigateComplete, left, top, right, bottom, width, height, false);
+			WWebViewWin32.AddUrlScheme(name, "wwebview");
+			return true;
+		}
+
+		public static bool Init(string name, int top, int left, int bottom, int right)
+		{
+			return WWebViewPlugin.Init(name, top, left, bottom, right, 0, 0);
+		}
+
+		public static void Release()
+		{
+			WWebViewWin32.Release();
+		}
+
+		public static void ChangeInsets(string name, int top, int left, int bottom, int right, int width, int height)
+		{
+			WWebViewWin32.ChangeLayout(name, left, top, right, bottom, width, height);
+		}
+
+		public static void ChangeInsets(string name, int top, int left, int bottom, int right)
+		{
+			WWebViewPlugin.ChangeInsets(name, top, left, bottom, right, 0, 0);
+		}
+
+		public static void SetFrame(string name, int x, int y, int width, int height)
+		{
+			WWebViewPlugin.ChangeInsets(name, y, x, -1, -1, width, height);
+		}
+
+		public static void SetPosition(string name, int x, int y)
+		{
+			WWebViewPlugin.ChangeInsets(name, y, x, -1, -1, -1, -1);
+		}
+
+		public static void SetSize(string name, int width, int height)
+		{
+			WWebViewPlugin.ChangeInsets(name, -1, -1, -1, -1, width, height);
+		}
+
+		public static void EnableContextMenu(string name, bool enable)
+		{
+			WWebViewWin32.EnableContextMenu(name, enable);
+		}
+
+		public static void SetTexture(string name, Texture texture)
+		{
+			WWebViewWin32.SetTexture(name, texture.GetNativeTexturePtr(), texture.width, texture.height);
+		}
+
+		public static void InputEvent(string name, int state, int key, int x, int y)
+		{
+			WWebViewWin32.InputEvent(name, state, key, x, y);
+		}
+
+		public static void SetZoom(string name, int factor)
+		{
+			WWebViewWin32.SetZoom(name, factor);
+		}
+
+		public static IntPtr GetRenderEventFunc()
+		{
+			return WWebViewWin32.GetRenderEventFunc();
+		}
+
+		public static void ShowScroll(string name, bool show)
+		{
+			WWebViewWin32.ShowScroll(name, show);
+		}
+
+		public static void ShowScrollX(string name, bool show)
+		{
+			WWebViewWin32.ShowScrollX(name, show);
+		}
+
+		public static bool SetHorizontalScrollBarShow(string name, bool show)
+		{
+			WWebViewWin32.ShowScrollX(name, show);
+			return true;
+		}
+
+		public static void SetHorizontalScrollBarEnabled(string name, bool enabled)
+		{
+			WWebViewPlugin.ShowScrollX(name, enabled);
+		}
+
+		public static void ShowScrollY(string name, bool show)
+		{
+			WWebViewWin32.ShowScrollY(name, show);
+		}
+
+		public static bool SetVerticalScrollBarShow(string name, bool show)
+		{
+			WWebViewWin32.ShowScrollY(name, show);
+			return true;
+		}
+
+		public static void SetVerticalScrollBarEnabled(string name, bool enabled)
+		{
+			WWebViewPlugin.ShowScrollY(name, enabled);
+		}
+
+		public static void AddUrlScheme(string name, string scheme)
+		{
+			WWebViewWin32.AddUrlScheme(name, scheme);
+		}
+
+		public static void RemoveUrlScheme(string name, string scheme)
+		{
+			WWebViewWin32.RemoveUrlScheme(name, scheme);
+		}
+
+		public static void Load(string name, string url)
+		{
+			WWebViewWin32.Navigate(name, url);
+		}
+
+		public static void Load(string name, string url, bool skipEncoding)
+		{
+			WWebViewPlugin.Load(name, url);
+		}
+
+		public static void LoadHTMLString(string name, string html, string baseUrl)
+		{
+			WWebViewWin32.NavigateToString(name, html);
+		}
+
+		public static void LoadHTMLString(string name, string html, string baseUrl, bool skipEncoding)
+		{
+			WWebViewPlugin.LoadHTMLString(name, html, baseUrl);
+		}
+
+		public static void Reload(string name)
+		{
+			WWebViewWin32.Refresh(name);
+		}
+
+		public static void AddJavaScript(string name, string script)
+		{
+			WWebViewWin32.AddJavaScript(name, script);
+		}
+
+		public static void AddJavaScript(string name, string script, string identifier)
+		{
+			WWebViewPlugin.AddJavaScript(name, script);
+		}
+
+		public static void EvaluatingJavaScript(string name, string script)
+		{
+			GameObject gameObject = GameObject.Find(name);
+			if (gameObject != null)
+			{
+				string value = Marshal.PtrToStringAuto(WWebViewWin32.EvaluateJavaScript(name, script));
+				gameObject.SendMessage("EvalJavaScriptFinished", value, SendMessageOptions.DontRequireReceiver);
+			}
+		}
+
+		public static void EvaluateJavaScript(string name, string script, string identifier)
+		{
+			WWebViewPlugin.EvaluatingJavaScript(name, script);
+		}
+
+		public static void CleanCache(string name)
+		{
+			WWebViewWin32.CleanCache();
+		}
+
+		public static void CleanCookie(string name, string key)
+		{
+			WWebViewWin32.CleanCookie(name);
+		}
+
+		public static void ClearCookies()
+		{
+			WWebViewPlugin.CleanCookie(string.Empty, string.Empty);
+		}
+
+		public static string GetCookie(string url, string key)
+		{
+			return Marshal.PtrToStringAuto(WWebViewWin32.GetCookie(url, key));
+		}
+
+		public static string GetCookie(string url, string key, bool skipEncoding)
+		{
+			return WWebViewPlugin.GetCookie(url, key);
+		}
+
+		public static void SetCookie(string url, string cookie)
+		{
+			WWebViewWin32.SetCookie(url, cookie);
+		}
+
+		public static void SetCookie(string url, string cookie, bool skipEncoding)
+		{
+			WWebViewPlugin.SetCookie(url, cookie);
+		}
+
+		public static void Destroy(string name)
+		{
+			WWebViewWin32.Destroy(name);
+		}
+
+		public static void GoBack(string name)
+		{
+			WWebViewWin32.GoBack(name);
+		}
+
+		public static void GoForward(string name)
+		{
+			WWebViewWin32.GoForward(name);
+		}
+
+		public static void Stop(string name)
+		{
+			WWebViewWin32.Stop(name);
+		}
+
+		public static string GetCurrentUrl(string name)
+		{
+			return Marshal.PtrToStringAuto(WWebViewWin32.CurrentUrl(name));
+		}
+
+		public static string GetUrl(string name)
+		{
+			return WWebViewPlugin.GetCurrentUrl(name);
+		}
+
+		public static bool Show(string name, bool fade, int direction, float duration)
+		{
+			WWebViewWin32.Show(name, true);
+			return true;
+		}
+
+		public static bool Show(string name, bool fade, int edge, float duration, string identifier)
+		{
+			return WWebViewPlugin.Show(name, fade, edge, duration);
+		}
+
+		public static bool Hide(string name, bool fade, int direction, float duration)
+		{
+			WWebViewWin32.Show(name, false);
+			return true;
+		}
+
+		public static bool Hide(string name, bool fade, int edge, float duration, string identifier)
+		{
+			return WWebViewPlugin.Hide(name, fade, edge, duration);
+		}
+
+		public static void SetZoomEnable(string name, bool enable)
+		{
+		}
+
+		public static void SetZoomEnabled(string name, bool enabled)
+		{
+		}
+
+		public static string GetUserAgent(string name)
+		{
+			return Marshal.PtrToStringAuto(WWebViewWin32.GetUserAgent(name));
+		}
+
+		public static void SetUserAgent(string userAgent)
+		{
+			WWebViewWin32.SetUserAgent(null, userAgent);
+		}
+
+		public static void SetUserAgent(string name, string userAgent)
+		{
+			WWebViewWin32.SetUserAgent(name, userAgent);
+		}
+
+		public static void TransparentBackground(string name, bool transparent)
+		{
+			WWebViewWin32.Transparent(name, transparent);
+		}
+
+		public static float GetAlpha(string name)
+		{
+			return WWebViewWin32.GetAlpha(name);
+		}
+
+		public static float GetWebViewAlpha(string name)
+		{
+			return WWebViewPlugin.GetAlpha(name);
+		}
+
+		public static void SetAlpha(string name, float alpha)
+		{
+			WWebViewWin32.SetAlpha(name, alpha);
+		}
+
+		public static void SetWebViewAlpha(string name, float alpha)
+		{
+			WWebViewPlugin.SetAlpha(name, alpha);
+		}
+
+		public static int GetActualWidth(string name)
+		{
+			return WWebViewWin32.GetActualWidth(name);
+		}
+
+		public static int GetActualHeight(string name)
+		{
+			return WWebViewWin32.GetActualHeight(name);
+		}
+
+		public static bool CanGoBack(string name)
+		{
+			return WWebViewWin32.CanGoBack(name);
+		}
+
+		public static bool CanGoForward(string name)
+		{
+			return WWebViewWin32.CanGoForward(name);
+		}
+
+		public static void SetHeaderField(string name, string key, string value)
+		{
+			WWebViewWin32.SetHeaderField(name, key, value);
+		}
+
+		public static void SetSpinnerShowWhenLoading(string name, bool show)
+		{
+		}
+
+		public static void SetShowSpinnerWhileLoading(string name, bool show)
+		{
+		}
+
+		public static void SetSpinnerText(string name, string text)
+		{
+		}
+
+		public static void SetBounces(string name, bool enable)
+		{
+		}
+
+		public static bool GetOpenLinksInExternalBrowser(string name)
+		{
+			return false;
+		}
+
+		public static void SetOpenLinksInExternalBrowser(string name, bool value)
+		{
+		}
+
+		public static void SetBackgroundColor(string name, float r, float g, float b, float a)
+		{
+		}
+
+		public static void SetAllowAutoPlay(string name, bool value)
+		{
+		}
+
+		public static void SetAllowAutoPlay(bool flag)
+		{
+		}
+
+		public static void SetAllowInlinePlay(bool flag)
+		{
+		}
+
+		public static void SetAllowThirdPartyCookies(bool allowed)
+		{
+		}
+
+		public static void SetLogLevel(int level)
+		{
+		}
+
+		public static bool AnimateTo(string name, int x, int y, int width, int height, float duration, float delay, string identifier)
+		{
+			return false;
+		}
+
+		public static void AddSslExceptionDomain(string name, string domain)
+		{
+		}
+
+		public static void RemoveSslExceptionDomain(string name, string domain)
+		{
+		}
+
+		public static void SetAllowJavaScriptOpenWindow(bool flag)
+		{
+		}
+
+		public static void SetJavaScriptEnabled(bool flag)
+		{
+		}
+
+		public static void ClearHttpAuthUsernamePassword(string host, string realm)
+		{
+		}
+
+		public static void SetBouncesEnabled(string name, bool enabled)
+		{
+		}
+
+		public static void SetShowToolbar(string name, bool show, bool animated, bool onTop, bool adjustInset)
+		{
+		}
+
+		public static void SetToolbarDoneButtonText(string name, string text)
+		{
+		}
+
+		public static void SetWebContentsDebuggingEnabled(bool enabled)
+		{
+		}
+
+		public static void Print(string name)
+		{
+		}
+
+		private static void OnBeforeNavigate(IntPtr name, IntPtr url, IntPtr message, ref bool cancel)
+		{
+			GameObject gameObject = GameObject.Find(Marshal.PtrToStringAuto(name));
+			if (gameObject != null)
+			{
+				string value = Marshal.PtrToStringAuto(url);
+				string text = Marshal.PtrToStringAuto(message);
+				if (!string.IsNullOrEmpty(text))
+				{
+					gameObject.SendMessage("ReceivedMessage", value, SendMessageOptions.DontRequireReceiver);
+					if (text == "close" || text == "close/")
+					{
+						gameObject.SendMessage("WebViewDone", string.Empty, SendMessageOptions.DontRequireReceiver);
+					}
+				}
+				else
+				{
+					gameObject.SendMessage("LoadBegin", value, SendMessageOptions.DontRequireReceiver);
+				}
+			}
+		}
+
+		private static void OnDocumentComplete(IntPtr name, IntPtr url)
+		{
+			GameObject gameObject = GameObject.Find(Marshal.PtrToStringAuto(name));
+			if (gameObject != null)
+			{
+				gameObject.SendMessage("LoadComplete", Marshal.PtrToStringAuto(url), SendMessageOptions.DontRequireReceiver);
+			}
+		}
+
+		private static void OnWindowClosing(IntPtr name, bool childWindow, ref bool cancel)
+		{
+			GameObject gameObject = GameObject.Find(Marshal.PtrToStringAuto(name));
+			if (gameObject != null && !childWindow)
+			{
+				gameObject.SendMessage("WebViewDone", string.Empty, SendMessageOptions.DontRequireReceiver);
+			}
+		}
+
+		private static void OnTitleChange(IntPtr name, IntPtr title)
+		{
+		}
+
+		private static void OnNewWindow(IntPtr name, ref bool cancel)
+		{
+		}
+
+		private static void OnNavigateComplete(IntPtr name, IntPtr url)
+		{
+		}
+
+		private static WWebViewWin32.ActionDocumentComplete documentComplete;
+
+		private static WWebViewWin32.ActionBeforeNavigate beforeNavigate;
+
+		private static WWebViewWin32.ActionWindowClosing windowClosing;
+
+		private static WWebViewWin32.ActionTitleChange titleChange;
+
+		private static WWebViewWin32.ActionNewWindow newWindow;
+
+		private static WWebViewWin32.ActionNavigateComplete navigateComplete;
+
+		private static bool initialize;
+	}
+}

+ 74 - 0
Assembly-CSharp/ICODES/STUDIO/WWebView/WWebViewSystem.cs

@@ -0,0 +1,74 @@
+using System;
+using System.Collections;
+using UnityEngine;
+
+namespace ICODES.STUDIO.WWebView
+{
+	public sealed class WWebViewSystem : MonoBehaviour
+	{
+		public void Initialize()
+		{
+			this.InitializeWinPlayer();
+		}
+
+		private void InitializeWinPlayer()
+		{
+			WWebViewWin32.ModifyStyle(WWebViewWin32.FindUnityPlayerWindow(), 0L, 33554432L, 0u);
+			WWebViewWin32.SubclassWindow();
+			base.StartCoroutine("DispatchMessage");
+		}
+
+		private IEnumerator DispatchMessage()
+		{
+			for (;;)
+			{
+				yield return new WaitForFixedUpdate();
+				WWebViewWin32.DispatchMessage();
+			}
+			yield break;
+		}
+
+		public bool HoloLensVR
+		{
+			get
+			{
+				return false;
+			}
+		}
+
+		private void OnDestroy()
+		{
+			WWebViewSystem.instance = null;
+		}
+
+		private void OnApplicationQuit()
+		{
+			WWebViewPlugin.Release();
+		}
+
+		public static string EscapeJsonText(string data)
+		{
+			return data.Replace("\\", "\\\\").Replace("\"", "\\\"").Replace("/", "\\/");
+		}
+
+		public static WWebViewSystem Instance
+		{
+			get
+			{
+				if (WWebViewSystem.instance == null)
+				{
+					WWebViewSystem.instance = (UnityEngine.Object.FindObjectOfType(typeof(WWebViewSystem)) as WWebViewSystem);
+					if (WWebViewSystem.instance == null)
+					{
+						GameObject gameObject = new GameObject("WWebViewSystem");
+						UnityEngine.Object.DontDestroyOnLoad(gameObject);
+						WWebViewSystem.instance = gameObject.AddComponent<WWebViewSystem>();
+					}
+				}
+				return WWebViewSystem.instance;
+			}
+		}
+
+		private static WWebViewSystem instance;
+	}
+}

+ 269 - 0
Assembly-CSharp/ICODES/STUDIO/WWebView/WWebViewWin32.cs

@@ -0,0 +1,269 @@
+using System;
+using System.Runtime.InteropServices;
+using System.Text;
+using UnityEngine;
+using Win32;
+
+namespace ICODES.STUDIO.WWebView
+{
+	public class WWebViewWin32
+	{
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern int Initialize(IntPtr mainInstance, IntPtr prevInstance, string commandLine, int commandShow, IntPtr windowTemplate, int windowWidth, int windowHeight, int version);
+
+		[DllImport("Win32-WebView")]
+		public static extern bool SetResizeMode(uint mode);
+
+		[DllImport("Win32-WebView")]
+		public static extern void Release();
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern bool Create(string name, WWebViewWin32.ActionDocumentComplete documentComplete, WWebViewWin32.ActionBeforeNavigate beforeNavigate, WWebViewWin32.ActionWindowClosing windowClosing, WWebViewWin32.ActionTitleChange titleChange, WWebViewWin32.ActionNewWindow newWindow, WWebViewWin32.ActionNavigateComplete navigateComplete, int left, int top, int right, int bottom, int width, int height, bool popup);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void Navigate(string name, string url);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void NavigateToString(string name, string text);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern IntPtr AddJavaScript(string name, string script);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern IntPtr EvaluateJavaScript(string name, string script);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void Destroy(string name);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void EnableContextMenu(string name, bool enable);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void CleanCache();
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void CleanCookie(string name);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern IntPtr GetCookie(string url, string key);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void SetCookie(string url, string cookie);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void Refresh(string name);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void GoBack(string name);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void GoForward(string name);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void Stop(string name);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void Show(string name, bool show);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void ChangeLayout(string name, int left, int top, int right, int bottom, int width, int height);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern IntPtr CurrentUrl(string name);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void AddUrlScheme(string name, string scheme);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void RemoveUrlScheme(string name, string scheme);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void SetZoom(string name, int factor);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void SetUserAgent(string name, string userAgent);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern IntPtr GetUserAgent(string name);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void SetTexture(string name, IntPtr texture, int width, int height);
+
+		[DllImport("Win32-WebView")]
+		public static extern IntPtr GetRenderEventFunc();
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void Transparent(string name, bool transparent);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern float GetAlpha(string name);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void SetAlpha(string name, float alpha);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern int GetActualWidth(string name);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern int GetActualHeight(string name);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void ShowScroll(string name, bool show);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void ShowScrollX(string name, bool show);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void ShowScrollY(string name, bool show);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void SetTitleText(string name, string text);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern bool CanGoBack(string name);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern bool CanGoForward(string name);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void SetSilent(string name, bool mode);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void InputEvent(string name, int state, int key, int x, int y);
+
+		[DllImport("Win32-WebView", CharSet = CharSet.Auto)]
+		public static extern void SetHeaderField(string name, string key, string value);
+
+		[DllImport("Win32-WebView")]
+		public static extern void DispatchAccelerator();
+
+		public static void DispatchMessage()
+		{
+			WWebViewWin32.DispatchAccelerator();
+		}
+
+		public static bool ModifyStyle(IntPtr window, long remove, long add, uint flags)
+		{
+			IntPtr windowLong = User32.GetWindowLong(window, -16);
+			IntPtr intPtr = new IntPtr(((long)windowLong.ToInt32() & ~remove) | add);
+			if (windowLong == intPtr)
+			{
+				return false;
+			}
+			User32.SetWindowLong(window, -16, intPtr);
+			if (flags != 0u)
+			{
+				User32.SetWindowPos(window, IntPtr.Zero, 0, 0, 0, 0, 23u | flags);
+			}
+			return true;
+		}
+
+		public static IntPtr FindUnityPlayerWindow()
+		{
+			IntPtr intPtr = WWebViewWin32.FindUnityWindow("UnityWndClass", null);
+			if (intPtr != IntPtr.Zero)
+			{
+				return intPtr;
+			}
+			return User32.FindWindow("UnityWndClass", Application.productName);
+		}
+
+		public static IntPtr FindUnityEditorWindow()
+		{
+			return WWebViewWin32.FindUnityWindow("UnityContainerWndClass", "Unity");
+		}
+
+		public static IntPtr FindUnityWindow(string targetClassName, string prefixWindowText = null)
+		{
+			uint currentProcessId = Kernel32.GetCurrentProcessId();
+			IntPtr intPtr = User32.GetTopWindow(IntPtr.Zero);
+			while (intPtr != IntPtr.Zero)
+			{
+				uint num;
+				User32.GetWindowThreadProcessId(intPtr, out num);
+				if (num == currentProcessId && User32.IsWindowVisible(intPtr) != 0)
+				{
+					StringBuilder stringBuilder = new StringBuilder(1024);
+					User32.GetClassName(intPtr, stringBuilder, stringBuilder.Capacity);
+					if (stringBuilder.ToString() == targetClassName)
+					{
+						StringBuilder stringBuilder2 = new StringBuilder(1024);
+						User32.GetWindowText(intPtr, stringBuilder2, stringBuilder2.Capacity);
+						if (string.IsNullOrEmpty(prefixWindowText) || stringBuilder2.ToString().StartsWith(prefixWindowText))
+						{
+							return intPtr;
+						}
+					}
+				}
+				intPtr = User32.GetWindow(intPtr, 2u);
+			}
+			return IntPtr.Zero;
+		}
+
+		public static void SubclassWindow()
+		{
+			IntPtr hWnd = WWebViewWin32.FindUnityPlayerWindow();
+			WWebViewWin32.ActionWindowProc d = new WWebViewWin32.ActionWindowProc(WWebViewWin32.WindowProc);
+			IntPtr functionPointerForDelegate = Marshal.GetFunctionPointerForDelegate(d);
+			WWebViewWin32.defaultWindowProc = User32.SetWindowLong(hWnd, -4, functionPointerForDelegate);
+		}
+
+		public static void UnsubclassWindow()
+		{
+			if (WWebViewWin32.defaultWindowProc != IntPtr.Zero)
+			{
+				User32.SetWindowLong(WWebViewWin32.FindUnityPlayerWindow(), -4, WWebViewWin32.defaultWindowProc);
+				WWebViewWin32.defaultWindowProc = IntPtr.Zero;
+			}
+		}
+
+		private static IntPtr DefWindowProc(IntPtr window, uint message, IntPtr wparam, IntPtr lparam)
+		{
+			if (WWebViewWin32.defaultWindowProc != IntPtr.Zero)
+			{
+				return User32.CallWindowProc(WWebViewWin32.defaultWindowProc, window, message, wparam, lparam);
+			}
+			return User32.DefWindowProcW(window, message, wparam, lparam);
+		}
+
+		private static IntPtr WindowProc(IntPtr window, uint message, IntPtr wparam, IntPtr lparam)
+		{
+			bool flag = false;
+			IntPtr result = IntPtr.Zero;
+			if (message == 16u)
+			{
+				flag = WWebViewWin32.OnClose(window, message, wparam, lparam, ref result);
+			}
+			if (!flag)
+			{
+				result = WWebViewWin32.DefWindowProc(window, message, wparam, lparam);
+			}
+			return result;
+		}
+
+		private static bool OnClose(IntPtr window, uint message, IntPtr wparam, IntPtr lparam, ref IntPtr result)
+		{
+			WWebViewWin32.UnsubclassWindow();
+			Application.Quit();
+			return true;
+		}
+
+		private static IntPtr defaultWindowProc = IntPtr.Zero;
+
+		private static MSG lastMsg;
+
+		public delegate void ActionDocumentComplete(IntPtr name, IntPtr url);
+
+		public delegate void ActionBeforeNavigate(IntPtr name, IntPtr url, IntPtr message, ref bool cancel);
+
+		public delegate void ActionWindowClosing(IntPtr name, bool childWindow, ref bool cancel);
+
+		public delegate void ActionTitleChange(IntPtr name, IntPtr title);
+
+		public delegate void ActionNewWindow(IntPtr name, ref bool cancel);
+
+		public delegate void ActionNavigateComplete(IntPtr name, IntPtr url);
+
+		public delegate IntPtr ActionWindowProc(IntPtr window, uint message, IntPtr wparam, IntPtr lparam);
+	}
+}

+ 1 - 0
Assembly-CSharp/IKCtrlData.cs

@@ -424,6 +424,7 @@ public abstract class IKCtrlData
 			{
 				if (tgt_data.TgtChara != null && tgt_data.TgtChara.body0 != null)
 				{
+					tgt_data.TgtChara.body0.SkinMeshUpdateOnce();
 					Vector3 vector;
 					tgt_data.TgtChara.body0.goSlot[tgt_data.Tgt_AttachSlot].morph.GetAttachPoint(tgt_data.Tgt_AttachName, out pos, out rot, out vector, false);
 					if (setting_data.MyType == IKCtrlData.IKAttachType.NewPoint && tgt_data.AxisTgt)

+ 6 - 0
Assembly-CSharp/KaraokeDataManager.cs

@@ -301,6 +301,10 @@ public class KaraokeDataManager : MonoBehaviour
 		{
 			list.Add("Curtness");
 		}
+		if (GameMain.Instance.CMSystem.GetTmpGenericFlag("Missy_KARAOKE") == 1)
+		{
+			list.Add("Missy");
+		}
 		List<Maid> list2 = new List<Maid>();
 		List<Maid> list3 = new List<Maid>();
 		CharacterSelectManager.DefaultMaidList(list3);
@@ -743,6 +747,8 @@ public class KaraokeDataManager : MonoBehaviour
 
 	public const string STR_PERSONAL_CURTNESS_ENABLED_FLAG = "Curtness_KARAOKE";
 
+	public const string STR_PERSONAL_MISSY_ENABLED_FLAG = "Missy_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>();

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

@@ -864,7 +864,7 @@ namespace Kasizuki
 		public void Serialize(BinaryWriter bw)
 		{
 			bw.Write("COM3D2_KASIZUKI");
-			bw.Write(1350);
+			bw.Write(1430);
 			this.SerializeOriginHeader(bw);
 			foreach (KeyValuePair<int, KasizukiManager.SaveData> keyValuePair in this.m_SaveDataArray)
 			{

+ 6 - 4
Assembly-CSharp/LifeModeChangeWindow.cs

@@ -4,6 +4,7 @@ using UnityEngine;
 using UnityEngine.Events;
 using UnityEngine.EventSystems;
 using UnityEngine.UI;
+using wf;
 
 public class LifeModeChangeWindow : MonoBehaviour
 {
@@ -106,14 +107,14 @@ public class LifeModeChangeWindow : MonoBehaviour
 			LifeModeChangeWindow.BannerEnterHandler component = toggle.GetComponent<LifeModeChangeWindow.BannerEnterHandler>();
 			component.onPointerEnter = delegate()
 			{
-				<OpenWindow>c__AnonStorey.UpdateDescription(data.strDescription);
+				<OpenWindow>c__AnonStorey.UpdateDescription(data.strDescription, data.termDescription);
 			};
 			component.onPointerExit = delegate()
 			{
-				<OpenWindow>c__AnonStorey.UpdateDescription(GameModeManager.GetData(<OpenWindow>c__AnonStorey.m_NowSelectType).strDescription);
+				<OpenWindow>c__AnonStorey.UpdateDescription(GameModeManager.GetData(<OpenWindow>c__AnonStorey.m_NowSelectType).strDescription, GameModeManager.GetData(<OpenWindow>c__AnonStorey.m_NowSelectType).termDescription);
 			};
 		});
-		this.UpdateDescription(GameModeManager.GetData().strDescription);
+		this.UpdateDescription(GameModeManager.GetData().strDescription, GameModeManager.GetData().termDescription);
 		this.UpdateBannerList();
 	}
 
@@ -127,9 +128,10 @@ public class LifeModeChangeWindow : MonoBehaviour
 		}
 	}
 
-	private void UpdateDescription(string msg)
+	private void UpdateDescription(string msg, string termText)
 	{
 		this.m_UITextDescription.text = msg;
+		Utility.SetLocalizeTerm(this.m_UITextDescription, termText, false);
 	}
 
 	public void CloseWindow()

+ 3 - 3
Assembly-CSharp/Maid.cs

@@ -1378,7 +1378,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeProp(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MPROP_LIST");
-		f_bwWrite.Write(1350);
+		f_bwWrite.Write(1430);
 		f_bwWrite.Write(this.m_dicMaidProp.Count);
 		int num = 0;
 		foreach (KeyValuePair<string, MaidProp> keyValuePair in this.m_dicMaidProp)
@@ -1412,7 +1412,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeMisc(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MAID_MISC");
-		f_bwWrite.Write(1350);
+		f_bwWrite.Write(1430);
 		f_bwWrite.Write(this.m_nActiveSlotNo);
 		if (this.m_texIcon != null)
 		{
@@ -1437,7 +1437,7 @@ public class Maid : MonoBehaviour
 	public bool SerializeBody(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MAID_BODY");
-		f_bwWrite.Write(1350);
+		f_bwWrite.Write(1430);
 		return true;
 	}
 

+ 4 - 4
Assembly-CSharp/MaidManagementMain.cs

@@ -163,11 +163,11 @@ public class MaidManagementMain : WfScreenChildren
 		}
 		if (this.button_dic_["雇用"].isEnabled)
 		{
-			this.button_dic_["雇用"].isEnabled = (this.GetMaidNumber() < 200);
+			this.button_dic_["雇用"].isEnabled = (this.GetMaidNumber() < 999);
 		}
 		if (this.button_dic_["移籍"].gameObject.activeInHierarchy && this.button_dic_["移籍"].isEnabled)
 		{
-			this.button_dic_["移籍"].isEnabled = (GameMain.Instance.CharacterMgr.status.isAvailableTransfer && this.GetMaidNumber() < 200);
+			this.button_dic_["移籍"].isEnabled = (GameMain.Instance.CharacterMgr.status.isAvailableTransfer && this.GetMaidNumber() < 999);
 		}
 		if (Product.isPublic)
 		{
@@ -527,8 +527,8 @@ public class MaidManagementMain : WfScreenChildren
 		}
 		this.chara_select_mgr_.RemoveMaidPlate(this.select_maid_);
 		this.chara_mgr_.BanishmentMaid(i);
-		this.button_dic_["雇用"].isEnabled = (this.GetMaidNumber() < 200);
-		this.button_dic_["移籍"].isEnabled = (GameMain.Instance.CharacterMgr.status.isAvailableTransfer && this.GetMaidNumber() < 200);
+		this.button_dic_["雇用"].isEnabled = (this.GetMaidNumber() < 999);
+		this.button_dic_["移籍"].isEnabled = (GameMain.Instance.CharacterMgr.status.isAvailableTransfer && this.GetMaidNumber() < 999);
 		GameMain.Instance.SysDlg.Show(text, SystemDialog.TYPE.OK, null, null);
 	}
 

+ 1 - 1
Assembly-CSharp/MaidParts.cs

@@ -37,7 +37,7 @@ public class MaidParts : MonoBehaviour
 	public unsafe bool Serialize(BinaryWriter f_bwWrite)
 	{
 		f_bwWrite.Write("CM3D2_MULTI_COL");
-		f_bwWrite.Write(1350);
+		f_bwWrite.Write(1430);
 		f_bwWrite.Write(this.m_aryPartsColor.Length);
 		for (int i = 0; i < this.m_aryPartsColor.Length; i++)
 		{

+ 1 - 1
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(1350);
+		f_bwWrite.Write(1430);
 		f_bwWrite.Write(this.idx);
 		f_bwWrite.Write(this.name);
 		f_bwWrite.Write(this.type);

+ 17 - 1
Assembly-CSharp/MaidStatus/Status.cs

@@ -1319,7 +1319,7 @@ namespace MaidStatus
 		{
 			this.SetFlag("__1330_specialrelation__", (int)this.specialRelation);
 			binary.Write("CM3D2_MAID_STATUS");
-			binary.Write(1350);
+			binary.Write(1430);
 			binary.Write(this.guid);
 			binary.Write(this.creationTime);
 			binary.Write((short)this.heroineType);
@@ -1715,6 +1715,21 @@ namespace MaidStatus
 					this.yotogiSkill.Remove(skillId);
 				}
 			}
+			if (num == 1380 && this.specialRelation == SpecialRelation.Null)
+			{
+				List<int> list2 = new List<int>();
+				foreach (YotogiSkillData yotogiSkillData2 in this.yotogiSkill.datas.GetValueArray())
+				{
+					if (yotogiSkillData2.data.getcondition_data.requestMarried)
+					{
+						list2.Add(yotogiSkillData2.id);
+					}
+				}
+				foreach (int skillId2 in list2)
+				{
+					this.yotogiSkill.Remove(skillId2);
+				}
+			}
 			List<Skill.Data> learnPossibleSkills = Skill.GetLearnPossibleSkills(this);
 			foreach (Skill.Data data2 in learnPossibleSkills)
 			{
@@ -1742,6 +1757,7 @@ namespace MaidStatus
 			string uniqueName = oldStatusReader.personal.ToString();
 			this.SetPersonal(Personal.GetData(uniqueName));
 			this.contract = oldStatusReader.contract;
+			this.additionalRelation = AdditionalRelation.Null;
 			this.body.height = oldStatusReader.body.height;
 			this.body.weight = oldStatusReader.body.weight;
 			this.body.bust = oldStatusReader.body.bust;

+ 1 - 1
Assembly-CSharp/Menu.cs

@@ -924,7 +924,7 @@ public class Menu : MonoBehaviour
 			Directory.CreateDirectory(text);
 		}
 		StreamWriter streamWriter = new StreamWriter(text + "\\" + text2 + ".txt", false, Encoding.UTF8);
-		streamWriter.WriteLine("出力バージョン\t" + 1350);
+		streamWriter.WriteLine("出力バージョン\t" + 1430);
 		streamWriter.WriteLine("基本アイテム\t" + filename.Replace(" ", ":"));
 		try
 		{

+ 6 - 1
Assembly-CSharp/MessageClass.cs

@@ -143,7 +143,12 @@ public class MessageClass
 		this.charaNameText = translationText.Key;
 		this.charaNameTranslationSet = translationText;
 		KeyValuePair<string, string> translationText2 = MessageClass.GetTranslationText(text);
-		this.mainTextAnimation.StartAnimation(translationText2.Key);
+		string text2 = translationText2.Key;
+		if (!Product.supportMultiLanguage)
+		{
+			text2 = MessageClass.GetWrapString(this.message_label_, text2);
+		}
+		this.mainTextAnimation.StartAnimation(text2);
 		this.subTextAnimation.StartAnimation(translationText2.Value);
 		this.message_mgr_.AddBackLog(translationText, this.mainTextAnimation.text, this.subTextAnimation.text, voice_file, voice_pitch, type);
 		this.Update();

+ 1 - 1
Assembly-CSharp/Misc.cs

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

+ 1 - 1
Assembly-CSharp/ModCompile.cs

@@ -604,7 +604,7 @@ public class ModCompile : MonoBehaviour
 		MemoryStream memoryStream = new MemoryStream();
 		BinaryWriter binaryWriter = new BinaryWriter(memoryStream);
 		binaryWriter.Write("CM3D2_MESH");
-		binaryWriter.Write(1350);
+		binaryWriter.Write(1430);
 		string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(f_strMqoFile);
 		binaryWriter.Write(fileNameWithoutExtension);
 		binaryWriter.Write(exObjIn2.strName);

+ 1 - 1
Assembly-CSharp/OnHoverTaskIcon.cs

@@ -64,7 +64,7 @@ public class OnHoverTaskIcon : MonoBehaviour
 				})[0];
 			}
 			string text2 = string.Empty;
-			text2 = LocalizationManager.GetTranslation("SceneDaily/スケジュール/項目/" + text, true, 0, true, false, null, null);
+			text2 = LocalizationManager.GetTranslation("SceneDaily/スケジュール/項目/" + text.Replace("×", "_"), true, 0, true, false, null, null);
 			if (string.IsNullOrEmpty(text2))
 			{
 				text2 = LocalizationManager.GetTranslation("SceneFacilityManagement/施設名/" + text, true, 0, true, false, null, null);

+ 2 - 2
Assembly-CSharp/OvrIK.cs

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

+ 1 - 1
Assembly-CSharp/PhotoModeSaveAndLoad.cs

@@ -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", 1350);
+		XElement xelement = new XElement("GameVersion", 1430);
 		XElement xelement2 = new XElement("SaveTime", value);
 		XElement xelement3 = new XElement("Title", title);
 		XElement xelement4 = new XElement("Comment", comment);

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

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

+ 152 - 0
Assembly-CSharp/PrivateEventListUnit.cs

@@ -0,0 +1,152 @@
+using System;
+using PrivateMaidMode;
+using UnityEngine;
+using wf;
+
+public class PrivateEventListUnit : MonoBehaviour
+{
+	public DataBase.BG.Event.PointData.Information infomation { get; private set; }
+
+	public bool isViewMode
+	{
+		get
+		{
+			return this.isViewMode_;
+		}
+		set
+		{
+			this.isViewMode_ = value;
+			this.isEnabled = this.isEnabled;
+		}
+	}
+
+	public bool isEnabled
+	{
+		get
+		{
+			return this.button.enabled;
+		}
+		set
+		{
+			Color color = (!value) ? this.button.disabledColor : this.button.defaultColor;
+			UIWidget component = this.button.tweenTarget.GetComponent<UIWidget>();
+			if (component != null)
+			{
+				component.color = color;
+			}
+			if (this.iconSprite != null)
+			{
+				this.iconSprite.color = color;
+			}
+			if (this.alreadyReadSprite != null)
+			{
+				this.alreadyReadSprite.color = color;
+			}
+			bool enabled = value;
+			if (this.isViewMode_)
+			{
+				enabled = false;
+			}
+			this.button.enabled = enabled;
+			UIPlayAnimation component2 = this.button.tweenTarget.GetComponent<UIPlayAnimation>();
+			if (component2 != null)
+			{
+				component2.enabled = enabled;
+			}
+		}
+	}
+
+	public bool isAlreadyReaded
+	{
+		get
+		{
+			return this.alreadyReadSprite.alpha == 0f;
+		}
+		set
+		{
+			this.alreadyReadSprite.alpha = (float)((!value) ? 1 : 0);
+		}
+	}
+
+	public void SetInformation(DataBase.BG.Event.PointData.Information infomation, Transform conditonParent, UIWFConditionList conditonPanel)
+	{
+		this.infomation = infomation;
+		this.conditonParent = conditonParent;
+		this.conditonPanel = conditonPanel;
+		this.titleLabel.text = infomation.title;
+		Utility.SetLocalizeTerm(this.titleLabel, infomation.titleTerm, false);
+		string path = string.Empty;
+		DataBase.BG.Event.PointData.Information.IconType iconType = infomation.iconType;
+		if (iconType != DataBase.BG.Event.PointData.Information.IconType.H)
+		{
+			if (iconType != DataBase.BG.Event.PointData.Information.IconType.NTR)
+			{
+				path = "ScenePrivate/Textures/privatemaid_icon_normal";
+			}
+			else
+			{
+				path = "ScenePrivate/Textures/privatemaid_icon_ntr";
+			}
+		}
+		else
+		{
+			path = "ScenePrivate/Textures/privatemaid_icon_h";
+		}
+		this.iconSprite.sprite2D = Resources.Load<Sprite>(path);
+	}
+
+	public void OnClickButton()
+	{
+		if (!this.isEnabled || this.onClickEvent == null)
+		{
+			return;
+		}
+		this.onClickEvent();
+	}
+
+	public void OnHoverOver()
+	{
+		if (this.conditonParent == null || this.conditonPanel == null || this.infomation == null)
+		{
+			return;
+		}
+		this.conditonParent.gameObject.SetActive(true);
+		this.conditonPanel.SetTexts(this.infomation.conditions.ToArray(), 500);
+		if (!this.isEnabled)
+		{
+			GameMain.Instance.SoundMgr.PlaySystem(SoundMgr.SeType.Hover);
+		}
+	}
+
+	public void OnHoverOut()
+	{
+		if (this.conditonParent == null || this.conditonPanel == null || this.infomation == null)
+		{
+			return;
+		}
+		this.conditonParent.gameObject.SetActive(false);
+	}
+
+	[SerializeField]
+	private UI2DSprite iconSprite;
+
+	[SerializeField]
+	private UI2DSprite alreadyReadSprite;
+
+	[SerializeField]
+	private UILabel titleLabel;
+
+	[SerializeField]
+	private UIButton button;
+
+	[SerializeField]
+	private UIEventTrigger eventTrigger;
+
+	public Action onClickEvent;
+
+	private UIWFConditionList conditonPanel;
+
+	private Transform conditonParent;
+
+	private bool isViewMode_;
+}

+ 46 - 14
Assembly-CSharp/PrivateEventManager.cs

@@ -16,10 +16,11 @@ public class PrivateEventManager : WfScreenChildren
 	public override void Awake()
 	{
 		base.Awake();
-		if (this.eventHelpObject != null)
+		this.eventIconVisibleCheckBox.onClick.Add(delegate(WFCheckBox checkBox)
 		{
-			this.eventHelpObject.SetActive(false);
-		}
+			this.SetEventListVisible(!checkBox.check);
+		});
+		this.eventHelpObject.SetActive(false);
 	}
 
 	protected override void OnCall()
@@ -27,12 +28,14 @@ public class PrivateEventManager : WfScreenChildren
 		this.okButton.gameObject.SetActive(false);
 		if (ScenePrivateEventModeAwake.callEventId == -1)
 		{
-			if (this.eventHelpObject != null)
-			{
-				this.eventHelpObject.SetActive(true);
-			}
+			this.eventHelpObject.SetActive(true);
 			base.StartCoroutine(this.SetupPrivateMode());
 		}
+		else
+		{
+			this.eventIconVisibleCheckBox.gameObject.SetActive(false);
+			this.eventSelectPanel.gameObject.SetActive(false);
+		}
 	}
 
 	protected IEnumerator SetupPrivateMode()
@@ -64,7 +67,22 @@ public class PrivateEventManager : WfScreenChildren
 		this.bgEvent = privateModeData.SelectBG.GetEvent(this.isNoon);
 		if (this.bgEvent != null)
 		{
-			if (this.eventHelpObject != null && this.bgEvent.eventPointList.Length <= 0)
+			UnityEngine.Object.DestroyImmediate(this.eventHitObject);
+			this.eventHitObject = this.bgEvent.InstantiateHitPrefab(this.bgHitPrefabParent.gameObject);
+			this.eventHitObject.SetActive(true);
+			bool flag = false;
+			foreach (PrivateModeEventObject privateModeEventObject in this.eventHitObject.GetComponentsInChildren<PrivateModeEventObject>())
+			{
+				DataBase.BG.Event.PointData eventData = this.bgEvent.GetEventData(privateModeEventObject.GetEventNo());
+				bool flag2 = this.bgEvent.IsExec(this.maid, privateModeEventObject.GetEventNo());
+				if (flag2 && !this.bgEvent.IsFinishedReadingFile(this.maid, eventData, this.bgEvent.GetNextScenarioIndex(this.maid, eventData)))
+				{
+					privateModeEventObject.CreateNewStar();
+				}
+				privateModeEventObject.gameObject.SetActive(flag2);
+				flag = (flag || flag2);
+			}
+			if (this.eventHelpObject != null && (this.bgEvent.eventPointList.Length <= 0 || !flag))
 			{
 				UILabel component = UTY.GetChildObject(this.eventHelpObject, "Text/Text", false).GetComponent<UILabel>();
 				if (component != null)
@@ -72,22 +90,30 @@ public class PrivateEventManager : WfScreenChildren
 					component.text = "イベントがありません";
 				}
 			}
-			if (this.eventHitObject != null)
-			{
-				UnityEngine.Object.DestroyImmediate(this.eventHitObject);
-			}
-			this.eventHitObject = this.bgEvent.InstantiateHitPrefab(this.bgHitPrefabParent.gameObject);
-			this.eventHitObject.SetActive(true);
 		}
 		PrivateModeEventObject.onClickObject = new Action<int>(this.OnClickEventObject);
 		privateModeData.LoadLocation();
 		yield return null;
+		this.eventSelectPanel.Setup(null, null);
+		this.SetEventListVisible(GameMain.Instance.CMSystem.SConfig.PrivateModeEventListVisible);
 		this.okButton.gameObject.SetActive(true);
 		this.setupCompleted = true;
 		uGUITutorialPanel.OpenTutorial("ScenePrivateEventMode", null, false);
 		yield break;
 	}
 
+	private void SetEventListVisible(bool visible)
+	{
+		this.eventIconVisibleCheckBox.check = !visible;
+		this.eventSelectPanel.gameObject.SetActive(visible);
+		UTY.GetChildObject(this.eventHelpObject, "Text", false).SetActive(!visible);
+		if (this.eventHitObject != null)
+		{
+			this.eventHitObject.SetActive(!visible);
+		}
+		GameMain.Instance.CMSystem.SConfig.PrivateModeEventListVisible = visible;
+	}
+
 	protected override bool IsCallFadeIn()
 	{
 		return this.setupCompleted;
@@ -151,6 +177,12 @@ public class PrivateEventManager : WfScreenChildren
 	[SerializeField]
 	private GameObject eventHelpObject;
 
+	[SerializeField]
+	private PrivateEventSelectPanel eventSelectPanel;
+
+	[SerializeField]
+	private WFCheckBox eventIconVisibleCheckBox;
+
 	protected bool setupCompleted;
 
 	protected Maid maid;

+ 96 - 0
Assembly-CSharp/PrivateEventSelectPanel.cs

@@ -0,0 +1,96 @@
+using System;
+using System.Collections.Generic;
+using PrivateMaidMode;
+using UnityEngine;
+
+public class PrivateEventSelectPanel : MonoBehaviour
+{
+	private Maid maid
+	{
+		get
+		{
+			return (!(PrivateModeMgr.Instance.PrivateMaid != null)) ? GameMain.Instance.CharacterMgr.GetMaid(0) : PrivateModeMgr.Instance.PrivateMaid;
+		}
+	}
+
+	public void Setup(Maid overRideMaid = null, DataBase.BG overRideBg = null)
+	{
+		foreach (GameObject obj in this.unitList)
+		{
+			UnityEngine.Object.Destroy(obj);
+		}
+		this.conditionParent.gameObject.SetActive(false);
+		DataBase.BG bg = (overRideBg != null) ? overRideBg : PrivateModeMgr.Instance.SelectBG;
+		Maid maid = (!(overRideMaid == null)) ? overRideMaid : this.maid;
+		if (bg == null || maid == null)
+		{
+			return;
+		}
+		DataBase.BG.Event @event = bg.GetEvent(true);
+		foreach (DataBase.BG.Event.PointData pointData in @event.eventPointList)
+		{
+			bool flag = pointData.IsExec(maid) && @event.isNoon == GameMain.Instance.CharacterMgr.status.isDaytime;
+			int nextScenarioIndex = @event.GetNextScenarioIndex(maid, pointData);
+			int no = pointData.no;
+			for (int j = 0; j < pointData.information.Count; j++)
+			{
+				bool isAlreadyReaded = @event.IsFinishedReadingFile(maid, pointData, j);
+				DataBase.BG.Event.PointData.Information info = pointData.information[j];
+				bool isExec = flag && nextScenarioIndex == j;
+				PrivateEventListUnit privateEventListUnit = this.InstantiateUnitOBject(info, no, isExec, isAlreadyReaded);
+				this.unitGrid.AddChild(privateEventListUnit.transform);
+				this.unitGrid.repositionNow = true;
+				this.unitList.Add(privateEventListUnit.gameObject);
+			}
+		}
+	}
+
+	private PrivateEventListUnit InstantiateUnitOBject(DataBase.BG.Event.PointData.Information info, int eventNo, bool isExec, bool isAlreadyReaded)
+	{
+		Maid maid = this.maid;
+		GameObject gameObject = UnityEngine.Object.Instantiate<GameObject>(this.eventUnit.gameObject, this.eventUnit.transform);
+		gameObject.SetActive(true);
+		gameObject.name = info.title;
+		PrivateEventListUnit component = gameObject.GetComponent<PrivateEventListUnit>();
+		component.SetInformation(info, this.conditionParent, this.conditionList);
+		component.isViewMode = this.isViewMode;
+		component.isEnabled = isExec;
+		component.isAlreadyReaded = isAlreadyReaded;
+		if (component.isEnabled && !component.isViewMode)
+		{
+			PrivateEventListUnit privateEventListUnit = component;
+			privateEventListUnit.onClickEvent = (Action)Delegate.Combine(privateEventListUnit.onClickEvent, new Action(delegate()
+			{
+				PrivateModeMgr instance = PrivateModeMgr.Instance;
+				if (instance == null)
+				{
+					return;
+				}
+				if (maid == null)
+				{
+					return;
+				}
+				DataBase.BG.Event @event = instance.SelectBG.GetEvent(true);
+				@event.LoadScript(maid, eventNo);
+			}));
+		}
+		return component;
+	}
+
+	[SerializeField]
+	private PrivateEventListUnit eventUnit;
+
+	[SerializeField]
+	private UIGrid unitGrid;
+
+	[SerializeField]
+	private Transform conditionParent;
+
+	[SerializeField]
+	private UIWFConditionList conditionList;
+
+	[SerializeField]
+	private bool isViewMode;
+
+	private readonly List<GameObject> unitList = new List<GameObject>();
+}

+ 234 - 47
Assembly-CSharp/PrivateMaidMode/DataBase.cs

@@ -1,6 +1,7 @@
 using System;
 using System.Collections.Generic;
 using System.IO;
+using MaidStatus;
 using UnityEngine;
 using wf;
 
@@ -90,6 +91,7 @@ namespace PrivateMaidMode
 				NDebug.Assert(condition, text + "\nopen failed.");
 				array2[i] = new KeyValuePair<AFileBase, CsvParser>(afileBase, csvParser);
 			}
+			Dictionary<string, List<List<DataBase.BG.Event.PointData.Information[]>>> eventInfoDatabase = DataBase.LoadPointInformation();
 			Dictionary<string, DataBase.BG.Event[]> dictionary = new Dictionary<string, DataBase.BG.Event[]>();
 			using (AFileBase afileBase2 = GameUty.FileSystem.FileOpen("private_maidmode_event_list.nei"))
 			{
@@ -100,7 +102,7 @@ namespace PrivateMaidMode
 					for (int j = 1; j < csvParser2.max_cell_y; j++)
 					{
 						string key;
-						DataBase.BG.Event @event = new DataBase.BG.Event(j, csvParser2, ref key);
+						DataBase.BG.Event @event = new DataBase.BG.Event(eventInfoDatabase, j, csvParser2, ref key);
 						if (!dictionary.ContainsKey(key))
 						{
 							dictionary.Add(key, new DataBase.BG.Event[2]);
@@ -150,6 +152,101 @@ namespace PrivateMaidMode
 			}
 		}
 
+		private static Dictionary<string, List<List<DataBase.BG.Event.PointData.Information[]>>> LoadPointInformation()
+		{
+			Dictionary<string, List<List<DataBase.BG.Event.PointData.Information[]>>> dictionary = new Dictionary<string, List<List<DataBase.BG.Event.PointData.Information[]>>>();
+			Dictionary<int, DataBase.BG.Event.PointData.Information> dictionary2 = new Dictionary<int, DataBase.BG.Event.PointData.Information>();
+			using (AFileBase afileBase = GameUty.FileSystem.FileOpen("private_maidmode_eventinformation_list.nei"))
+			{
+				using (CsvParser csvParser = new CsvParser())
+				{
+					csvParser.Open(afileBase);
+					NDebug.Assert(csvParser.IsValid(), "private_maidmode_eventinformation_list.nei\nopen failed.");
+					for (int i = 1; i < csvParser.max_cell_y; i++)
+					{
+						int num = 0;
+						int cellAsInteger = csvParser.GetCellAsInteger(num++, i);
+						string cellAsString = csvParser.GetCellAsString(num++, i);
+						string cellAsString2 = csvParser.GetCellAsString(num++, i);
+						string a = csvParser.GetCellAsString(num++, i).ToLower();
+						DataBase.BG.Event.PointData.Information.IconType iconType = DataBase.BG.Event.PointData.Information.IconType.Normal;
+						if (a == "h")
+						{
+							iconType = DataBase.BG.Event.PointData.Information.IconType.H;
+						}
+						else if (a == "n")
+						{
+							iconType = DataBase.BG.Event.PointData.Information.IconType.NTR;
+						}
+						if (dictionary2.ContainsKey(cellAsInteger))
+						{
+							NDebug.Assert("csv parse error.\nprivate_maidmode_eventinformation_list.nei", false);
+						}
+						dictionary2.Add(cellAsInteger, new DataBase.BG.Event.PointData.Information(cellAsString, new List<string>(cellAsString2.Split(new char[]
+						{
+							'|'
+						})), iconType));
+					}
+				}
+			}
+			using (AFileBase afileBase2 = GameUty.FileSystem.FileOpen("private_maidmode_eventlink_list.nei"))
+			{
+				using (CsvParser csvParser2 = new CsvParser())
+				{
+					csvParser2.Open(afileBase2);
+					NDebug.Assert(csvParser2.IsValid(), "private_maidmode_eventlink_list.nei\nopen failed.");
+					for (int j = 1; j < csvParser2.max_cell_y; j++)
+					{
+						int cell_x = 0;
+						string cellAsString3 = csvParser2.GetCellAsString(cell_x++, j);
+						string cellAsString4 = csvParser2.GetCellAsString(cell_x++, j);
+						while (csvParser2.IsCellToExistData(cell_x, j))
+						{
+							string cellAsString5 = csvParser2.GetCellAsString(cell_x++, j);
+							List<int> list = new List<int>();
+							if (!string.IsNullOrEmpty(cellAsString5))
+							{
+								foreach (string s in cellAsString5.Split(new char[]
+								{
+									'/'
+								}))
+								{
+									int item = 0;
+									if (int.TryParse(s, out item))
+									{
+										list.Add(item);
+									}
+									else
+									{
+										NDebug.Assert("csv parse error.\nprivate_maidmode_eventlink_list.nei", false);
+									}
+								}
+							}
+							if (!dictionary.ContainsKey(cellAsString3))
+							{
+								dictionary.Add(cellAsString3, new List<List<DataBase.BG.Event.PointData.Information[]>>());
+								for (int l = 0; l < 2; l++)
+								{
+									dictionary[cellAsString3].Add(new List<DataBase.BG.Event.PointData.Information[]>());
+								}
+							}
+							List<DataBase.BG.Event.PointData.Information> list2 = new List<DataBase.BG.Event.PointData.Information>();
+							foreach (int key in list)
+							{
+								if (!dictionary2.ContainsKey(key))
+								{
+									NDebug.Assert("csv parse error.\nprivate_maidmode_eventlink_list.nei", false);
+								}
+								list2.Add(dictionary2[key]);
+							}
+							dictionary[cellAsString3][(!(cellAsString4 == "昼")) ? 1 : 0].Add(list2.ToArray());
+						}
+					}
+				}
+			}
+			return dictionary;
+		}
+
 		private const string csvTopCommonName = "private_maidmode_group";
 
 		private const string typeNameForErrorLog = "プライベートメイドモード";
@@ -158,6 +255,10 @@ namespace PrivateMaidMode
 
 		private const string eventDefineFileName = "private_maidmode_event_list.nei";
 
+		private const string eventLinkFileName = "private_maidmode_eventlink_list.nei";
+
+		private const string eventInformationFileName = "private_maidmode_eventinformation_list.nei";
+
 		private static CsvCommonIdManager commonIdManager;
 
 		private static Dictionary<int, DataBase.Data> basicDatas;
@@ -214,7 +315,6 @@ namespace PrivateMaidMode
 						if (@event != null)
 						{
 							@event.SetParentBg(this);
-							@event.ShuffleEventPlayOrder();
 						}
 					}
 				}
@@ -350,7 +450,7 @@ namespace PrivateMaidMode
 
 			public class Event
 			{
-				public Event(int lineY, CsvParser basicCsv, out string uniqueBgName)
+				public Event(Dictionary<string, List<List<DataBase.BG.Event.PointData.Information[]>>> eventInfoDatabase, int lineY, CsvParser basicCsv, out string uniqueBgName)
 				{
 					uniqueBgName = string.Empty;
 					if (!basicCsv.IsCellToExistData(0, lineY))
@@ -366,29 +466,75 @@ namespace PrivateMaidMode
 					{
 						this.eventScriptFile += ".ks";
 					}
-					List<DataBase.BG.Event.PointData> list = new List<DataBase.BG.Event.PointData>();
+					if (!eventInfoDatabase.ContainsKey(uniqueBgName))
+					{
+						NDebug.Assert(this.ToString() + "生成エラー", false);
+					}
+					List<DataBase.BG.Event.PointData.Information[]> list = eventInfoDatabase[uniqueBgName][(!this.isNoon) ? 1 : 0];
+					List<DataBase.BG.Event.PointData> list2 = new List<DataBase.BG.Event.PointData>();
 					for (int i = num; i < basicCsv.max_cell_x; i++)
 					{
-						int no = i - num + 1;
-						string cellAsString = basicCsv.GetCellAsString(i, lineY);
-						if (!string.IsNullOrEmpty(cellAsString))
+						int num2 = i - num + 1;
+						string text = basicCsv.GetCellAsString(i, lineY);
+						if (!string.IsNullOrEmpty(text))
 						{
-							List<string> list2 = new List<string>();
-							foreach (string text in cellAsString.Split(new char[]
+							List<string> list3 = new List<string>();
+							if (text.IndexOf("|") != -1)
+							{
+								string[] array = text.Split(new char[]
+								{
+									'|'
+								});
+								text = array[0];
+								string text2 = array[1];
+								foreach (string text3 in text2.Split(new char[]
+								{
+									','
+								}))
+								{
+									list3.Add(text3.Trim());
+								}
+							}
+							List<string> list4 = new List<string>();
+							foreach (string text4 in text.Split(new char[]
 							{
 								'/'
 							}))
 							{
-								list2.Add(text.Trim());
+								list4.Add(text4.Trim());
 							}
-							list.Add(new DataBase.BG.Event.PointData(no, list2));
+							DataBase.BG.Event.PointData.Information[] array4 = (list.Count > num2 - 1) ? list[num2 - 1] : null;
+							if (array4 == null || list4.Count != array4.Length)
+							{
+								NDebug.Assert(this.ToString() + "生成エラー2", false);
+							}
+							list2.Add(new DataBase.BG.Event.PointData(num2, list4, list3, new List<DataBase.BG.Event.PointData.Information>(array4)));
 						}
 					}
-					this.eventPointList = list.ToArray();
+					this.eventPointList = list2.ToArray();
 				}
 
 				public DataBase.BG parentBg { get; private set; }
 
+				public bool IsExec(Maid maid, int pointNo)
+				{
+					Status maidStatus = (!(maid != null)) ? null : maid.status;
+					return this.IsExec(maidStatus, pointNo);
+				}
+
+				public bool IsExec(Status maidStatus, int pointNo)
+				{
+					DataBase.BG.Event.PointData eventData = this.GetEventData(pointNo);
+					return eventData.IsExec(maidStatus);
+				}
+
+				public bool IsFinishedReadingFile(Maid maid, DataBase.BG.Event.PointData pointData, int index)
+				{
+					string file_name = this.eventScriptFile;
+					file_name = ScriptManager.ReplacePersonal(maid, this.eventScriptFile);
+					return GameMain.Instance.ScriptMgr.adv_kag.kag.GetRecordLabel(file_name, pointData.labelList[index]);
+				}
+
 				public GameObject InstantiateHitPrefab(GameObject parent)
 				{
 					GameObject result;
@@ -429,30 +575,16 @@ namespace PrivateMaidMode
 					DataBase.BG.Event.PointData eventData = this.GetEventData(pointNo);
 					if (eventData != null && GameMain.Instance != null && GameMain.Instance.ScriptMgr != null)
 					{
-						int hashCode = eventData.GetHashCode();
-						if (!this.scenarioIndexDictionary.ContainsKey(hashCode))
-						{
-							this.scenarioIndexDictionary.Add(hashCode, 0);
-						}
 						ScriptManager scriptMgr = GameMain.Instance.ScriptMgr;
 						string str = this.eventScriptFile;
 						if (maid != null)
 						{
 							str = ScriptManager.ReplacePersonal(maid, this.eventScriptFile);
 						}
-						int num = this.scenarioIndexDictionary[hashCode];
-						if (eventData.labelList.Count <= num)
-						{
-							num = 0;
-						}
-						if (maid != null && this.lastMaidGuid != maid.status.guid)
-						{
-							num = 0;
-							this.lastMaidGuid = maid.status.guid;
-						}
+						int nextScenarioIndex = this.GetNextScenarioIndex(maid, eventData);
 						GameMain.Instance.ScriptMgr.EvalScript("global.__private_maid_mode_adv_file = '" + str + "';");
-						GameMain.Instance.ScriptMgr.EvalScript("global.__private_maid_mode_adv_label = '" + eventData.labelList[num++] + "';");
-						this.scenarioIndexDictionary[hashCode] = num;
+						GameMain.Instance.ScriptMgr.EvalScript("global.__private_maid_mode_adv_label = '" + eventData.labelList[nextScenarioIndex++] + "';");
+						this.SetScenarioIndex(maid, eventData, nextScenarioIndex);
 						scriptMgr.LoadAdvScenarioScript("private_maid_mode_adv_call.ks", "*ADVスタート");
 						scriptMgr.adv_kag.Exec();
 						return true;
@@ -460,8 +592,14 @@ namespace PrivateMaidMode
 					return false;
 				}
 
-				public void ShuffleEventPlayOrder()
+				public int GetNextScenarioIndex(Maid maid, DataBase.BG.Event.PointData pointData)
 				{
+					int num = maid.status.GetFlag("__private_maid_mode_scenario_index_" + pointData.no.ToString());
+					if (pointData.labelList.Count <= num)
+					{
+						num = 0;
+					}
+					return num;
 				}
 
 				public void SetParentBg(DataBase.BG parentBg)
@@ -469,6 +607,11 @@ namespace PrivateMaidMode
 					this.parentBg = parentBg;
 				}
 
+				private void SetScenarioIndex(Maid maid, DataBase.BG.Event.PointData pointData, int scenarioIndex)
+				{
+					maid.status.SetFlag("__private_maid_mode_scenario_index_" + pointData.no.ToString(), scenarioIndex);
+				}
+
 				public readonly bool isNoon;
 
 				public readonly string hitPrefabPath;
@@ -477,37 +620,81 @@ namespace PrivateMaidMode
 
 				public readonly DataBase.BG.Event.PointData[] eventPointList;
 
-				private Dictionary<int, int> scenarioIndexDictionary = new Dictionary<int, int>();
-
-				private string lastMaidGuid = string.Empty;
-
 				public class PointData
 				{
-					public PointData(int no, List<string> labelList)
+					public PointData(int no, List<string> labelList, List<string> checkMaidFlag, List<DataBase.BG.Event.PointData.Information> information)
 					{
 						this.no = no;
 						this.labelList = labelList;
+						this.checkMaidFlag = checkMaidFlag;
+						this.information = information;
 					}
 
-					public List<string> labelList { get; private set; }
+					public bool IsExec(Maid maid)
+					{
+						return (!(maid != null)) ? this.IsExec(null) : this.IsExec(maid.status);
+					}
 
-					public void ShuffleLabel()
+					public bool IsExec(Status maidStatus)
 					{
-						string[] array = this.labelList.ToArray();
-						System.Random random = new System.Random();
-						int i = array.Length;
-						while (i > 1)
+						if (this.checkMaidFlag.Count <= 0)
+						{
+							return true;
+						}
+						if (maidStatus == null)
+						{
+							return false;
+						}
+						foreach (string flagName in this.checkMaidFlag)
 						{
-							i--;
-							int num = random.Next(i + 1);
-							string text = array[num];
-							array[num] = array[i];
-							array[i] = text;
+							if (maidStatus.GetFlag(flagName) <= 0)
+							{
+								return false;
+							}
 						}
-						this.labelList = new List<string>(array);
+						return true;
 					}
 
 					public readonly int no;
+
+					public readonly List<string> labelList;
+
+					public readonly List<string> checkMaidFlag;
+
+					public readonly List<DataBase.BG.Event.PointData.Information> information;
+
+					public class Information
+					{
+						public Information(string title, List<string> conditions, DataBase.BG.Event.PointData.Information.IconType iconType)
+						{
+							this.title = title;
+							this.conditions = conditions;
+							this.iconType = iconType;
+						}
+
+						public string titleTerm
+						{
+							get
+							{
+								return this.title;
+							}
+						}
+
+						public readonly DataBase.BG.Event.PointData pointData;
+
+						public readonly string title;
+
+						public readonly List<string> conditions;
+
+						public readonly DataBase.BG.Event.PointData.Information.IconType iconType;
+
+						public enum IconType
+						{
+							Normal,
+							H,
+							NTR
+						}
+					}
 				}
 			}
 		}

+ 87 - 0
Assembly-CSharp/PrivateMaidMode/PrivateCharaSelectMain.cs

@@ -15,6 +15,22 @@ namespace PrivateMaidMode
 			base.Awake();
 			this.charaContent = UTY.GetChildObject(base.root_obj, "CharacterSelect/uGUI Scroll View/Viewport/Content", false);
 			this.charaSelectMgr = UTY.GetChildObject(base.root_obj, "CharacterSelect/uGUI Scroll View/Viewport", false).GetComponent<uGUICharacterSelectManager>();
+			this.eventListVisibleCheckBox.onClick.Add(delegate(WFCheckBox checkBox)
+			{
+				this.SetEventListVisible(checkBox.check);
+			});
+			this.dayTalkToggle.onValueChanged.AddListener(delegate(bool call)
+			{
+				this.SetDayTalkToggle(call);
+			});
+			this.nightTalkToggle.onValueChanged.AddListener(delegate(bool call)
+			{
+				this.SetNightTalkToggle(call);
+			});
+			this.hEventToggle.onValueChanged.AddListener(delegate(bool call)
+			{
+				this.SetHEventToggle(call);
+			});
 		}
 
 		protected override void OnCall()
@@ -27,6 +43,9 @@ namespace PrivateMaidMode
 			this.m_selectLocation = null;
 			this.charaMgr = GameMain.Instance.CharacterMgr;
 			this.isDaily = this.charaMgr.status.isDaytime;
+			this.dayTalkToggle.isOn = GameMain.Instance.CMSystem.SConfig.PrivateModeSettingDayTalkEnabled;
+			this.nightTalkToggle.isOn = GameMain.Instance.CMSystem.SConfig.PrivateModeSettingNightTalkEnabled;
+			this.hEventToggle.isOn = GameMain.Instance.CMSystem.SConfig.PrivateModeSettingHEventEnabled;
 			this.charaSelectMgr.SetCallBackOnSelect(new uGUICharacterSelectManager.CallBackOnSelect(this.SelectCharacter));
 			uGUICharacterSelectManager uGUICharacterSelectManager = this.charaSelectMgr;
 			if (PrivateCharaSelectMain.<>f__mg$cache0 == null)
@@ -60,6 +79,8 @@ namespace PrivateMaidMode
 				this.m_selectBG = PrivateModeMgr.Instance.SelectBG;
 				this.m_selectLocation = PrivateModeMgr.Instance.SelectLocation;
 				this.SetSelectAll();
+				this.SetEventListVisible(GameMain.Instance.CMSystem.SConfig.PrivateModeSettingEventListVisible);
+				this.eventSelectPanel.Setup(null, null);
 			}
 			else
 			{
@@ -225,6 +246,8 @@ namespace PrivateMaidMode
 			this.bgPanel.SetActive(false);
 			this.bgPositionPanel.SetActive(false);
 			this.ResetSetting();
+			this.SetEventListVisible(false);
+			this.eventListVisibleCheckBox.gameObject.SetActive(false);
 		}
 
 		private void OnClickSelectChara()
@@ -243,6 +266,9 @@ namespace PrivateMaidMode
 				this.charaMgr.SetActiveMaid(this.m_selectMaid, 0);
 				this.m_selectMaid.Visible = true;
 				base.StartCoroutine(this.WaitCharaLoad());
+				this.SetEventListVisible(true);
+				this.eventListVisibleCheckBox.gameObject.SetActive(true);
+				this.eventSelectPanel.Setup(this.m_selectMaid, this.m_selectBG);
 			}
 		}
 
@@ -254,6 +280,7 @@ namespace PrivateMaidMode
 			}
 			yield return null;
 			yield return null;
+			this.m_selectBG.Apply(this.isDaily);
 			GameMain.Instance.ScriptMgr.is_motion_blend = false;
 			this.m_selectLocation.LoadScript();
 			GameMain.Instance.ScriptMgr.is_motion_blend = true;
@@ -284,6 +311,7 @@ namespace PrivateMaidMode
 			this.m_selectBG = bg;
 			this.m_selectBG.Apply(this.isDaily);
 			this.CreateBGPosPanel();
+			this.eventSelectPanel.Setup(this.m_selectMaid, this.m_selectBG);
 			GameMain.Instance.MainCamera.FadeIn(0.5f, false, null, true, true, default(Color));
 		}
 
@@ -473,6 +501,50 @@ namespace PrivateMaidMode
 			}
 		}
 
+		private void SetEventListVisible(bool visible)
+		{
+			this.eventListVisibleCheckBox.check = visible;
+			this.eventSelectPanel.gameObject.SetActive(visible);
+			GameMain.Instance.CMSystem.SConfig.PrivateModeSettingEventListVisible = visible;
+		}
+
+		private void SetDayTalkToggle(bool value)
+		{
+			this.dayTalkToggle.isOn = value;
+			this.SetToggleColor(this.dayTalkToggle, value);
+			GameMain.Instance.CMSystem.SConfig.PrivateModeSettingDayTalkEnabled = value;
+		}
+
+		private void SetNightTalkToggle(bool value)
+		{
+			this.nightTalkToggle.isOn = value;
+			this.SetToggleColor(this.nightTalkToggle, value);
+			GameMain.Instance.CMSystem.SConfig.PrivateModeSettingNightTalkEnabled = value;
+		}
+
+		private void SetHEventToggle(bool value)
+		{
+			this.hEventToggle.isOn = value;
+			this.SetToggleColor(this.hEventToggle, value);
+			GameMain.Instance.CMSystem.SConfig.PrivateModeSettingHEventEnabled = value;
+		}
+
+		private void SetToggleColor(Toggle toggle, bool value)
+		{
+			ColorBlock colors = toggle.colors;
+			if (value)
+			{
+				colors.normalColor = Color.white;
+				colors.highlightedColor = Color.white;
+			}
+			else
+			{
+				colors.normalColor = Color.gray;
+				colors.highlightedColor = Color.gray;
+			}
+			toggle.colors = colors;
+		}
+
 		public void OnClickOKButton()
 		{
 			PrivateModeMgr.Instance.SetPrivateMaid(this.m_selectMaid);
@@ -489,6 +561,21 @@ namespace PrivateMaidMode
 			}
 		}
 
+		[SerializeField]
+		private PrivateEventSelectPanel eventSelectPanel;
+
+		[SerializeField]
+		private WFCheckBox eventListVisibleCheckBox;
+
+		[SerializeField]
+		private Toggle dayTalkToggle;
+
+		[SerializeField]
+		private Toggle nightTalkToggle;
+
+		[SerializeField]
+		private Toggle hEventToggle;
+
 		private Maid m_selectMaid;
 
 		private DataBase.BG m_selectBG;

+ 2 - 6
Assembly-CSharp/PrivateMaidTouchManager.cs

@@ -51,13 +51,9 @@ public class PrivateMaidTouchManager : MonoBehaviour
 		{
 			int num = i;
 			this.colliderList[num].canTouch = this.playTouchData.EnabledPoint(this.colliderList[num].point);
-			ColliderEvent colliderEvent = this.colliderList[i].gameObject.AddComponent<ColliderEvent>();
-			colliderEvent.onMouseDown = delegate()
+			ColliderEventVR colliderEventVR = this.colliderList[i].gameObject.AddComponent<ColliderEventVR>();
+			colliderEventVR.onMouseDown = delegate()
 			{
-				if (UICamera.Raycast(Input.mousePosition))
-				{
-					return;
-				}
 				if (this.playTouchData.EnabledPoint(this.colliderList[num].point))
 				{
 					this.OnTouchPoint(this.colliderList[num].point);

+ 20 - 1
Assembly-CSharp/PrivateModeEventObject.cs

@@ -8,9 +8,20 @@ public class PrivateModeEventObject : MonoBehaviour
 		return this.eventNo;
 	}
 
+	public void CreateNewStar()
+	{
+		GameObject childObject = UTY.GetChildObject(base.gameObject, "top", true);
+		if (childObject == null)
+		{
+			childObject = UTY.GetChildObject(base.gameObject, "Top", false);
+		}
+		GameObject gameObject = UnityEngine.Object.Instantiate(Resources.Load("ScenePrivate/Odogu_gp002_SymbolStar")) as GameObject;
+		gameObject.transform.SetParent(childObject.transform, false);
+	}
+
 	private void Update()
 	{
-		if (!NInput.GetMouseButtonDown(0))
+		if (GameMain.Instance.VRMode || !NInput.GetMouseButtonDown(0))
 		{
 			return;
 		}
@@ -33,6 +44,14 @@ public class PrivateModeEventObject : MonoBehaviour
 		}
 	}
 
+	private void OnTriggerEnter(Collider collider)
+	{
+		if (GameMain.Instance.VRMode && collider.gameObject.layer == LayerMask.NameToLayer("OvrGrabHand") && PrivateModeEventObject.onClickObject != null)
+		{
+			PrivateModeEventObject.onClickObject(this.eventNo);
+		}
+	}
+
 	[SerializeField]
 	[Header("イベント番号")]
 	private int eventNo;

+ 4 - 0
Assembly-CSharp/RhythmAction_Mgr.cs

@@ -191,6 +191,10 @@ public class RhythmAction_Mgr : MonoBehaviour
 		this.m_NowTime = 0f;
 		this.m_LastTime = 0f;
 		this.m_DanceMain = GameObject.Find("_DanceMain_").GetComponent<DanceMain>();
+		if (DanceMain.SelectDanceData != null && !string.IsNullOrEmpty(DanceMain.SelectDanceData.csvFolderName))
+		{
+			this.m_UseMusicName = DanceMain.SelectDanceData.csvFolderName;
+		}
 		if (!base.transform.parent)
 		{
 			GameObject gameObject = GameObject.Find("UI Root");

+ 44 - 20
Assembly-CSharp/ScenarioData.cs

@@ -148,6 +148,12 @@ public class ScenarioData
 					'&'
 				});
 				break;
+			case 23:
+				action(ScenarioData.PlayableCondition.性経験, i);
+				break;
+			case 24:
+				action(ScenarioData.PlayableCondition.契約, i);
+				break;
 			}
 		}
 		this.CheckPlayableCondition(false);
@@ -327,9 +333,9 @@ public class ScenarioData
 		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
 		FacilityManager facilityMgr = GameMain.Instance.FacilityMgr;
 		bool and_operator = playableData.StringData.IndexOf("&") >= 0;
-		bool flag = playableData.StringData.IndexOf("|") >= 0;
+		bool or_operator = playableData.StringData.IndexOf("|") >= 0;
 		char c = ',';
-		if (and_operator && flag)
+		if (and_operator && or_operator)
 		{
 			Debug.LogError("条件演算子が混在してます");
 		}
@@ -337,7 +343,7 @@ public class ScenarioData
 		{
 			c = '&';
 		}
-		else if (flag)
+		else if (or_operator)
 		{
 			c = '|';
 		}
@@ -367,7 +373,7 @@ public class ScenarioData
 			{
 				set_ok(false);
 			}
-			if (maid_update)
+			if (maid_update && !or_operator)
 			{
 				this.RemoveEventMaid(maid, false);
 			}
@@ -452,12 +458,12 @@ public class ScenarioData
 								if (text == "移籍メイド")
 								{
 									add_maid(stockMaid2);
-									goto IL_447;
+									goto IL_45B;
 								}
 								if (text == "雇用移籍メイド")
 								{
 									action(stockMaid2, !stockMaid2.status.mainChara);
-									goto IL_447;
+									goto IL_45B;
 								}
 							}
 							string convertPersonal = GameMain.Instance.ScenarioSelectMgr.GetConvertPersonal(stockMaid2);
@@ -478,7 +484,7 @@ public class ScenarioData
 								action(stockMaid2, "移籍" + convertPersonal == text);
 							}
 						}
-						IL_447:;
+						IL_45B:;
 					}
 					else if (stockMaid2.status.heroineType == HeroineType.Original)
 					{
@@ -487,12 +493,12 @@ public class ScenarioData
 							if (text == "オリジナルメイド")
 							{
 								add_maid(stockMaid2);
-								goto IL_587;
+								goto IL_59B;
 							}
 							if (text == "雇用メイド")
 							{
 								action(stockMaid2, !stockMaid2.status.mainChara);
-								goto IL_587;
+								goto IL_59B;
 							}
 						}
 						string convertPersonal2 = GameMain.Instance.ScenarioSelectMgr.GetConvertPersonal(stockMaid2);
@@ -513,7 +519,7 @@ public class ScenarioData
 							action(stockMaid2, convertPersonal2 == text);
 						}
 					}
-					IL_587:;
+					IL_59B:;
 				}
 				break;
 			}
@@ -578,17 +584,17 @@ public class ScenarioData
 				{
 					Maid stockMaid6 = characterMgr.GetStockMaid(num2);
 					Propensity.Data[] valueArray = stockMaid6.status.propensitys.GetValueArray();
-					bool flag2 = false;
+					bool flag = false;
 					for (int num3 = 0; num3 < valueArray.Count<Propensity.Data>(); num3++)
 					{
 						if (valueArray[num3].drawName == text)
 						{
-							flag2 = true;
+							flag = true;
 							add_maid(stockMaid6);
 							break;
 						}
 					}
-					if (!flag2)
+					if (!flag)
 					{
 						remove_maid(stockMaid6);
 					}
@@ -600,17 +606,17 @@ public class ScenarioData
 				{
 					Maid stockMaid7 = characterMgr.GetStockMaid(num4);
 					SortedDictionary<int, ClassData<JobClass.Data>> allDatas = stockMaid7.status.jobClass.GetAllDatas();
-					bool flag3 = false;
+					bool flag2 = false;
 					for (int num5 = 0; num5 < allDatas.Count<KeyValuePair<int, ClassData<JobClass.Data>>>(); num5++)
 					{
 						if (allDatas[num5].data.drawName == text)
 						{
-							flag3 = true;
+							flag2 = true;
 							add_maid(stockMaid7);
 							break;
 						}
 					}
-					if (!flag3)
+					if (!flag2)
 					{
 						remove_maid(stockMaid7);
 					}
@@ -622,17 +628,17 @@ public class ScenarioData
 				{
 					Maid stockMaid8 = characterMgr.GetStockMaid(num6);
 					SortedDictionary<int, ClassData<YotogiClass.Data>> allDatas2 = stockMaid8.status.yotogiClass.GetAllDatas();
-					bool flag4 = false;
+					bool flag3 = false;
 					for (int num7 = 0; num7 < allDatas2.Count<KeyValuePair<int, ClassData<YotogiClass.Data>>>(); num7++)
 					{
 						if (allDatas2[num7].data.drawName == text)
 						{
-							flag4 = true;
+							flag3 = true;
 							add_maid(stockMaid8);
 							break;
 						}
 					}
-					if (!flag4)
+					if (!flag3)
 					{
 						remove_maid(stockMaid8);
 					}
@@ -699,8 +705,24 @@ public class ScenarioData
 					set_ok(!GameMain.Instance.CharacterMgr.status.lockNTRPlay);
 				}
 				break;
+			case ScenarioData.PlayableCondition.性経験:
+				action2();
+				for (int num11 = 0; num11 < characterMgr.GetStockMaidCount(); num11++)
+				{
+					Maid stockMaid12 = characterMgr.GetStockMaid(num11);
+					action(stockMaid12, EnumConvert.GetString(stockMaid12.status.seikeiken) == text);
+				}
+				break;
+			case ScenarioData.PlayableCondition.契約:
+				action2();
+				for (int num12 = 0; num12 < characterMgr.GetStockMaidCount(); num12++)
+				{
+					Maid stockMaid13 = characterMgr.GetStockMaid(num12);
+					action(stockMaid13, EnumConvert.GetString(stockMaid13.status.contract) == text);
+				}
+				break;
 			}
-			if (maid_check)
+			if (maid_check && maid_update)
 			{
 				if (and_operator)
 				{
@@ -897,6 +919,8 @@ public class ScenarioData
 		アイテム,
 		施設,
 		NTRブロック,
+		性経験,
+		契約,
 		MAX
 	}
 

+ 1 - 1
Assembly-CSharp/SceneEdit.cs

@@ -1538,7 +1538,7 @@ public class SceneEdit : MonoBehaviour
 		for (int n = 0; n < f_cate.m_listPartsType.Count; n++)
 		{
 			SceneEdit.SPartsType spartsType = f_cate.m_listPartsType[n];
-			if (MPN.EarNone <= spartsType.m_mpn && spartsType.m_mpn <= MPN.EarScl && !PluginData.IsEnabled("GP001") && Product.type != Product.Type.JpPublic)
+			if (MPN.EarNone <= spartsType.m_mpn && spartsType.m_mpn <= MPN.EarScl && !PluginData.IsEnabled("GP001"))
 			{
 				this.m_listBtnPartsType.Add(null);
 			}

+ 24 - 0
Assembly-CSharp/SceneNPCEdit/EditCharacterDatabase.cs

@@ -200,6 +200,30 @@ namespace SceneNPCEdit
 				return null;
 			}
 
+			public string firstNameTerm
+			{
+				get
+				{
+					return "SceneNPCEdit/" + this.id.ToString() + "/名前";
+				}
+			}
+
+			public string lastNameTerm
+			{
+				get
+				{
+					return "SceneNPCEdit/" + this.id.ToString() + "/苗字";
+				}
+			}
+
+			public string informationTerm
+			{
+				get
+				{
+					return "SceneNPCEdit/" + this.id.ToString() + "/説明";
+				}
+			}
+
 			public readonly int id;
 
 			public readonly CharacterMgr.NpcData npcData;

+ 18 - 2
Assembly-CSharp/SceneNPCEdit/NPCCharaSelect.cs

@@ -1,4 +1,5 @@
 using System;
+using I2.Loc;
 using UnityEngine;
 using wf;
 
@@ -34,6 +35,21 @@ namespace SceneNPCEdit
 				npceditPlate.onSelectEvent = new Action<NPCEditPlate>(this.OnSelectPlate);
 				npceditPlate.lastName = data.npcData.lastName;
 				npceditPlate.firstName = data.npcData.firstName;
+				if (Product.supportMultiLanguage)
+				{
+					npceditPlate.lastName = data.npcData.firstName;
+					npceditPlate.firstName = data.npcData.lastName;
+					string translation = LocalizationManager.GetTranslation(data.firstNameTerm, true, 0, true, false, null, Product.EnumConvert.ToI2LocalizeLanguageName(Product.defaultLanguage));
+					if (!string.IsNullOrEmpty(translation))
+					{
+						npceditPlate.lastName = translation;
+					}
+					translation = LocalizationManager.GetTranslation(data.lastNameTerm, true, 0, true, false, null, Product.EnumConvert.ToI2LocalizeLanguageName(Product.defaultLanguage));
+					if (!string.IsNullOrEmpty(translation))
+					{
+						npceditPlate.firstName = translation;
+					}
+				}
 				Texture2D thumbnail = (!SaveData.Contains(data.id)) ? data.GetThumbnail() : SaveData.GetPreset(data.id).texThum;
 				npceditPlate.thumbnail = thumbnail;
 			}
@@ -80,7 +96,7 @@ namespace SceneNPCEdit
 					NPCEditPlate component = this.MaidPlateParentGrid.GetChild(i).GetComponent<NPCEditPlate>();
 					Texture2D thumbnail = (!SaveData.Contains(num)) ? this.selectNPC.GetThumbnail() : SaveData.GetPreset(num).texThum;
 					component.thumbnail = thumbnail;
-					this.statusPanel.Apply(component, this.selectNPC.additionalInformationText);
+					this.statusPanel.Apply(component, this.selectNPC.additionalInformationText, this.selectNPC.informationTerm);
 				}
 			}
 		}
@@ -88,7 +104,7 @@ namespace SceneNPCEdit
 		public void OnSelectPlate(NPCEditPlate selectPlate)
 		{
 			this.selectNPC = EditCharacterDatabase.GetData(int.Parse(selectPlate.name));
-			this.statusPanel.Apply(selectPlate, this.selectNPC.additionalInformationText);
+			this.statusPanel.Apply(selectPlate, this.selectNPC.additionalInformationText, this.selectNPC.informationTerm);
 		}
 
 		public static EditCharacterDatabase.Data editTargetNPCData;

+ 3 - 1
Assembly-CSharp/SceneNPCEdit/NPCEditStatus.cs

@@ -1,17 +1,19 @@
 using System;
 using UnityEngine;
+using wf;
 
 namespace SceneNPCEdit
 {
 	public class NPCEditStatus : MonoBehaviour
 	{
-		public void Apply(NPCEditPlate plate, string additionalInformationText)
+		public void Apply(NPCEditPlate plate, string additionalInformationText, string tnformationTextTerm = "")
 		{
 			this.labelLastName.text = plate.lastName;
 			this.labelFirstName.text = plate.firstName;
 			this.thumSprite.mainTexture = plate.thumbnail;
 			this.thumSprite.SetDimensions(61, 88);
 			this.additionalInformationText.text = additionalInformationText;
+			Utility.SetLocalizeTerm(this.additionalInformationText, tnformationTextTerm, false);
 		}
 
 		[SerializeField]

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

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

+ 0 - 17
Assembly-CSharp/ScenePrivateEventModeAwake.cs

@@ -1,6 +1,5 @@
 using System;
 using System.Collections.Generic;
-using PrivateMaidMode;
 
 public class ScenePrivateEventModeAwake : WfScreenManager
 {
@@ -38,22 +37,6 @@ public class ScenePrivateEventModeAwake : WfScreenManager
 				ScenePrivateEventModeAwake.callEventId = callEventId;
 			}
 			this.moveScreen.SetNextLabel(ScenePrivateEventModeAwake.returnLabel);
-			if (adv_kag.tag_backup.ContainsKey("event_reset"))
-			{
-				foreach (DataBase.BG bg in DataBase.GetAllBGDatas())
-				{
-					if (bg.events != null)
-					{
-						foreach (DataBase.BG.Event @event in bg.events)
-						{
-							if (@event != null)
-							{
-								@event.ShuffleEventPlayOrder();
-							}
-						}
-					}
-				}
-			}
 		}
 		this.CallScreen("Main");
 	}

+ 49 - 30
Assembly-CSharp/Schedule/ScheduleAPI.cs

@@ -1359,27 +1359,46 @@ namespace Schedule
 						}
 					}
 				}
-				else if (yotogi.condRelation.Count > 0)
+				else
 				{
-					bool flag4 = false;
-					for (int num3 = 0; num3 < yotogi.condRelation.Count; num3++)
+					if (yotogi.condRelation.Count > 0)
 					{
-						if (yotogi.condRelation[num3] == maid.status.relation)
+						bool flag4 = false;
+						for (int num3 = 0; num3 < yotogi.condRelation.Count; num3++)
 						{
-							flag4 = true;
-							break;
+							if (yotogi.condRelation[num3] == maid.status.relation)
+							{
+								flag4 = true;
+								break;
+							}
+						}
+						if (!flag4)
+						{
+							return false;
 						}
 					}
-					if (!flag4)
+					if (yotogi.condSpecialRelation.Count > 0)
 					{
-						return false;
+						bool flag5 = false;
+						for (int num4 = 0; num4 < yotogi.condSpecialRelation.Count; num4++)
+						{
+							if (yotogi.condSpecialRelation[num4] == maid.status.specialRelation)
+							{
+								flag5 = true;
+								break;
+							}
+						}
+						if (!flag5)
+						{
+							return false;
+						}
 					}
 				}
 				if (yotogi.condManFlag1.Count > 0)
 				{
-					for (int num4 = 0; num4 < yotogi.condManFlag1.Count; num4++)
+					for (int num5 = 0; num5 < yotogi.condManFlag1.Count; num5++)
 					{
-						if (GameMain.Instance.CharacterMgr.status.GetFlag(yotogi.condManFlag1[num4]) < 1)
+						if (GameMain.Instance.CharacterMgr.status.GetFlag(yotogi.condManFlag1[num5]) < 1)
 						{
 							return false;
 						}
@@ -1387,9 +1406,9 @@ namespace Schedule
 				}
 				if (yotogi.condManFlag0.Count > 0)
 				{
-					for (int num5 = 0; num5 < yotogi.condManFlag0.Count; num5++)
+					for (int num6 = 0; num6 < yotogi.condManFlag0.Count; num6++)
 					{
-						if (GameMain.Instance.CharacterMgr.status.GetFlag(yotogi.condManFlag0[num5]) > 0)
+						if (GameMain.Instance.CharacterMgr.status.GetFlag(yotogi.condManFlag0[num6]) > 0)
 						{
 							return false;
 						}
@@ -1397,16 +1416,16 @@ namespace Schedule
 				}
 				if (yotogi.condContract.Count > 0)
 				{
-					bool flag5 = false;
-					for (int num6 = 0; num6 < yotogi.condContract.Count; num6++)
+					bool flag6 = false;
+					for (int num7 = 0; num7 < yotogi.condContract.Count; num7++)
 					{
-						if (yotogi.condContract[num6] == maid.status.contract)
+						if (yotogi.condContract[num7] == maid.status.contract)
 						{
-							flag5 = true;
+							flag6 = true;
 							break;
 						}
 					}
-					if (!flag5)
+					if (!flag6)
 					{
 						return false;
 					}
@@ -1415,8 +1434,8 @@ namespace Schedule
 				{
 					foreach (List<int> list in yotogi.condFacilityID)
 					{
-						bool flag6 = false;
-						foreach (int num7 in list)
+						bool flag7 = false;
+						foreach (int num8 in list)
 						{
 							Facility[] facilityArray = GameMain.Instance.FacilityMgr.GetFacilityArray();
 							foreach (Facility facility in facilityArray)
@@ -1437,11 +1456,11 @@ namespace Schedule
 								{
 									scheduleTime = ScheduleTaskViewer.ScheduleTime;
 								}
-								if (!(facility == null) && facility.defaultData.ID == num7)
+								if (!(facility == null) && facility.defaultData.ID == num8)
 								{
 									if (facility.IsOperation(scheduleTime))
 									{
-										flag6 = true;
+										flag7 = true;
 										Maid[] allocationMaidArray = facility.GetAllocationMaidArray(scheduleTime);
 										if (allocationMaidArray != null && allocationMaidArray.Length == facility.minMaidCount)
 										{
@@ -1449,24 +1468,24 @@ namespace Schedule
 											{
 												if (maid == y)
 												{
-													flag6 = false;
+													flag7 = false;
 													break;
 												}
 											}
 										}
-										if (flag6)
+										if (flag7)
 										{
 											break;
 										}
 									}
 								}
 							}
-							if (flag6)
+							if (flag7)
 							{
 								break;
 							}
 						}
-						if (!flag6)
+						if (!flag7)
 						{
 							ScheduleAPI.log("対象の施設が稼動していない");
 							return false;
@@ -1479,16 +1498,16 @@ namespace Schedule
 				}
 				if (yotogi.condPersonal.Count > 0)
 				{
-					bool flag7 = false;
-					for (int num10 = 0; num10 < yotogi.condPersonal.Count; num10++)
+					bool flag8 = false;
+					for (int num11 = 0; num11 < yotogi.condPersonal.Count; num11++)
 					{
-						if (maid.status.personal.id == yotogi.condPersonal[num10])
+						if (maid.status.personal.id == yotogi.condPersonal[num11])
 						{
-							flag7 = (!yotogi.isCheckGP002Personal || PluginData.IsEnabledForGP002Personal(maid.status.personal.uniqueName));
+							flag8 = (!yotogi.isCheckGP002Personal || PluginData.IsEnabledForGP002Personal(maid.status.personal.uniqueName));
 							break;
 						}
 					}
-					if (!flag7)
+					if (!flag8)
 					{
 						return false;
 					}

+ 10 - 2
Assembly-CSharp/Schedule/ScheduleCSVData.cs

@@ -747,6 +747,7 @@ namespace Schedule
 						'|'
 					}, StringSplitOptions.RemoveEmptyEntries);
 					yotogi.condRelation = new List<MaidStatus.Relation>();
+					yotogi.condSpecialRelation = new List<SpecialRelation>();
 					yotogi.condRelationOld = new List<MaidStatus.Old.Relation>();
 					if (mode == ScheduleCSVData.ScheduleBase.Mode.COM3D)
 					{
@@ -756,6 +757,10 @@ namespace Schedule
 							{
 								yotogi.condRelation.Add((MaidStatus.Relation)Enum.Parse(typeof(MaidStatus.Relation), array10[num6], false));
 							}
+							else if (Enum.IsDefined(typeof(SpecialRelation), array10[num6]))
+							{
+								yotogi.condSpecialRelation.Add((SpecialRelation)Enum.Parse(typeof(SpecialRelation), array10[num6], false));
+							}
 						}
 					}
 					else if (mode == ScheduleCSVData.ScheduleBase.Mode.CM3D2)
@@ -916,7 +921,7 @@ namespace Schedule
 						}
 						else if (mode == ScheduleCSVData.ScheduleBase.Mode.CM3D2 && yotogi.yotogiType != ScheduleCSVData.YotogiType.Vip && yotogi.yotogiType != ScheduleCSVData.YotogiType.VipCall)
 						{
-							goto IL_AB8;
+							goto IL_B06;
 						}
 						if (yotogi.id > 0)
 						{
@@ -924,7 +929,7 @@ namespace Schedule
 						}
 					}
 				}
-				IL_AB8:;
+				IL_B06:;
 			}
 		}
 
@@ -974,6 +979,7 @@ namespace Schedule
 					yotogi.condSeikeiken = new List<Seikeiken>();
 					yotogi.condYotogiClass = new List<int>();
 					yotogi.condRelation = new List<MaidStatus.Relation>();
+					yotogi.condSpecialRelation = new List<SpecialRelation>();
 					yotogi.condPropensity = new List<int>();
 					yotogi.condFlag0 = new List<string>();
 					yotogi.condFlag1 = new List<string>();
@@ -1441,6 +1447,8 @@ namespace Schedule
 
 			public List<MaidStatus.Relation> condRelation;
 
+			public List<SpecialRelation> condSpecialRelation;
+
 			public string subMaidUnipueName = string.Empty;
 
 			public List<string> condPackage;

+ 100 - 1
Assembly-CSharp/ScriptManager.cs

@@ -8,6 +8,7 @@ using MaidStatus;
 using MaidStatus.CsvData;
 using MaidStatus.Old;
 using PlayerStatus;
+using PrivateMaidMode;
 using Schedule;
 using UnityEngine;
 using wf;
@@ -218,6 +219,7 @@ public class ScriptManager : IDisposable
 		this.tjs_ = TJSScript.Create(this.file_system);
 		this.tjs_.AddFunction("GetMaidMPN", new TJSScript.FunctionCallBack(this.TJSFuncGetMaidMPN));
 		this.tjs_.AddFunction("GetMenuFileNameFromMaidMPN", new TJSScript.FunctionCallBack(this.TJSFuncGetMenuFileNameFromMaidMPN));
+		this.tjs_.AddFunction("IsEquipTatoo", new TJSScript.FunctionCallBack(this.TJSFuncIsEquipTatoo));
 		this.tjs_.AddFunction("SetMaidFlag", new TJSScript.FunctionCallBack(this.TJSFuncSetMaidFlag));
 		this.tjs_.AddFunction("SetManFlag", new TJSScript.FunctionCallBack(this.TJSFuncSetManFlag));
 		this.tjs_.AddFunction("SetTmpFlag", new TJSScript.FunctionCallBack(this.TJSFuncSetTmpFlag));
@@ -357,6 +359,11 @@ public class ScriptManager : IDisposable
 		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("IsPrivateModeMaid", new TJSScript.FunctionCallBack(this.TJSFuncIsPrivateModeMaid));
+		this.tjs_.AddFunction("IsPrivateModeDayTalkEnabled", new TJSScript.FunctionCallBack(this.TJSFuncIsPrivateModeDayTalkEnabled));
+		this.tjs_.AddFunction("IsPrivateModeNightTalkEnabled", new TJSScript.FunctionCallBack(this.TJSFuncIsPrivateModeNightTalkEnabled));
+		this.tjs_.AddFunction("IsPrivateModeHEventEnabled", new TJSScript.FunctionCallBack(this.TJSFuncIsPrivateModeHEventEnabled));
+		this.tjs_.AddFunction("SetPrivateModeMaid", new TJSScript.FunctionCallBack(this.TJSFuncSetPrivateModeMaid));
 		this.tjs_.AddFunction("SetLockNTRPlay", new TJSScript.FunctionCallBack(this.TJSFuncSetLockNTRPlay));
 		this.tjs_.AddFunction("IsEnabeldAdditionalRelation", new TJSScript.FunctionCallBack(this.TJSFuncIsEnabeldAdditionalRelation));
 		MotionKagManager motionKagManager = new MotionKagManager(this.tjs_, this);
@@ -647,6 +654,38 @@ public class ScriptManager : IDisposable
 		}
 	}
 
+	private void TJSFuncIsEquipTatoo(TJSVariantRef[] param, TJSVariantRef result)
+	{
+		NDebug.Assert(1 == param.Length, "IsEquipTatoo args count error.");
+		if (result == null)
+		{
+			return;
+		}
+		TJSVariantRef.Type[] array = new TJSVariantRef.Type[]
+		{
+			TJSVariantRef.Type.tvtInteger
+		};
+		for (int i = 0; i < param.Length; i++)
+		{
+			NDebug.Assert(param[i].type == array[i], "TJSFuncGetMaidProp args[" + i + "] type error.");
+		}
+		int nMaidNo = param[0].AsInteger();
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(nMaidNo);
+		MaidProp prop = maid.GetProp(MPN.acctatoo);
+		result.SetBool(false);
+		if (prop != null && prop.listSubProp != null)
+		{
+			foreach (SubProp subProp in prop.listSubProp)
+			{
+				if (subProp != null && !string.IsNullOrEmpty(subProp.strFileName))
+				{
+					result.SetBool(true);
+					break;
+				}
+			}
+		}
+	}
+
 	private void TJSFuncSetMaidFlag(TJSVariantRef[] param, TJSVariantRef result)
 	{
 		NDebug.Assert(param.Length == 2 || 3 == param.Length, "SetMaidFlag args count error.");
@@ -3099,6 +3138,66 @@ public class ScriptManager : IDisposable
 		result.SetBool(GameModeManager.nowGameMode == GameModeManager.Type.LifeMode);
 	}
 
+	public void TJSFuncIsPrivateModeMaid(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		if (result == null)
+		{
+			return;
+		}
+		NDebug.Assert(tjs_param.Length == 1, "IsPrivateModeMaid args count error.");
+		NDebug.Assert(tjs_param[0].type == TJSVariantRef.Type.tvtInteger, "error.");
+		Maid maid = GameMain.Instance.CharacterMgr.GetMaid(tjs_param[0].AsInteger());
+		result.SetBool(maid != null && maid == PrivateModeMgr.Instance.PrivateMaid);
+	}
+
+	public void TJSFuncIsPrivateModeDayTalkEnabled(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		if (result != null)
+		{
+			result.SetBool(GameMain.Instance.CMSystem.SConfig.PrivateModeSettingDayTalkEnabled);
+		}
+	}
+
+	public void TJSFuncIsPrivateModeNightTalkEnabled(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		if (result != null)
+		{
+			result.SetBool(GameMain.Instance.CMSystem.SConfig.PrivateModeSettingNightTalkEnabled);
+		}
+	}
+
+	public void TJSFuncIsPrivateModeHEventEnabled(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		if (result != null)
+		{
+			result.SetBool(GameMain.Instance.CMSystem.SConfig.PrivateModeSettingHEventEnabled);
+		}
+	}
+
+	public void TJSFuncSetPrivateModeMaid(TJSVariantRef[] tjs_param, TJSVariantRef result)
+	{
+		Maid privateMaid = PrivateModeMgr.Instance.PrivateMaid;
+		if (privateMaid == null)
+		{
+			if (result != null)
+			{
+				result.SetBool(false);
+			}
+			return;
+		}
+		int f_nActiveSlotNo = 0;
+		if (tjs_param.Length > 0)
+		{
+			f_nActiveSlotNo = tjs_param[0].AsInteger();
+		}
+		GameMain.Instance.CharacterMgr.SetActiveMaid(privateMaid, f_nActiveSlotNo);
+		privateMaid.Visible = true;
+		if (result != null)
+		{
+			result.SetBool(true);
+		}
+	}
+
 	public void TJSFuncSetLockNTRPlay(TJSVariantRef[] tjs_param, TJSVariantRef result)
 	{
 		NDebug.Assert(tjs_param.Length == 1, "SetLockNTRPlay:引数が1つ必要です");
@@ -3237,7 +3336,7 @@ public class ScriptManager : IDisposable
 	public void Serialize(BinaryWriter binary)
 	{
 		binary.Write("CM3D2_SCRIPT");
-		binary.Write(1350);
+		binary.Write(1430);
 		this.adv_kag_.Serialize(binary);
 	}
 

+ 26 - 19
Assembly-CSharp/TBody.cs

@@ -2514,6 +2514,7 @@ public class TBody : MonoBehaviour
 	private void Update()
 	{
 		this.LateUpdateEnd = false;
+		this.m_IsSkinMeshUpdatedOnce = false;
 		for (int i = 0; i < this.goSlot.Count; i++)
 		{
 			this.goSlot[i].TextureCache.Update();
@@ -2695,29 +2696,11 @@ public class TBody : MonoBehaviour
 			this.Thigh_L_pos_old = this.Thigh_L.position;
 			this.Thigh_R_pos_old = this.Thigh_R.position;
 		}
-		if (this.m_IKCtrl.IsSelfIKAttach || this.m_IKCtrl.IsTargetIKAttachSelf(true))
-		{
-			for (int i = 0; i < this.goSlot.Count; i++)
-			{
-				if (this.goSlot[i].obj != null)
-				{
-					this.goSlot[i].CopyTrans();
-				}
-				this.goSlot[i].Update();
-			}
-		}
 		this.m_IKCtrl.IKUpdate();
 		if (!this.m_IKCtrl.IsUpdateLate)
 		{
 			this.AutoTwist();
-			for (int j = 0; j < this.goSlot.Count; j++)
-			{
-				if (this.goSlot[j].obj != null)
-				{
-					this.goSlot[j].CopyTrans();
-				}
-				this.goSlot[j].Update();
-			}
+			this.SkinMeshUpdate();
 		}
 		this.LateUpdateEnd = true;
 		if (this.OnLateUpdateEnd != null)
@@ -2727,6 +2710,28 @@ public class TBody : MonoBehaviour
 		this.OnLateUpdateEnd = null;
 	}
 
+	public void SkinMeshUpdateOnce()
+	{
+		if (this.m_IsSkinMeshUpdatedOnce)
+		{
+			return;
+		}
+		this.SkinMeshUpdate();
+	}
+
+	public void SkinMeshUpdate()
+	{
+		for (int i = 0; i < this.goSlot.Count; i++)
+		{
+			if (this.goSlot[i].obj != null)
+			{
+				this.goSlot[i].CopyTrans();
+			}
+			this.goSlot[i].Update();
+		}
+		this.m_IsSkinMeshUpdatedOnce = true;
+	}
+
 	public float DegPer(float r, float per)
 	{
 		if (r <= 180f)
@@ -3096,6 +3101,8 @@ public class TBody : MonoBehaviour
 
 	public bool LateUpdateEnd;
 
+	private bool m_IsSkinMeshUpdatedOnce;
+
 	public Action OnLateUpdate;
 
 	private Transform m_SMbody;

+ 1 - 1
Assembly-CSharp/TaskUnit.cs

@@ -69,7 +69,7 @@ public class TaskUnit : MonoBehaviour
 		}
 		else
 		{
-			this.TitleLocalize.SetTerm("SceneDaily/スケジュール/項目/" + this.schedule.name);
+			this.TitleLocalize.SetTerm("SceneDaily/スケジュール/項目/" + this.schedule.name.Replace("×", "_"));
 		}
 		this.Icon.mainTexture = viewer.TmpData(taskType).icons[this.schedule.icon];
 	}

+ 1 - 1
Assembly-CSharp/TatooAlphaWindow.cs

@@ -105,7 +105,7 @@ public class TatooAlphaWindow : BasePhotoWindow
 							string f_name = smenuItem.m_strMenuName;
 							if (Product.systemLanguage != Product.Language.Japanese)
 							{
-								string str = "parts/" + smenuItem.m_strCateName + "/" + Path.GetFileNameWithoutExtension(smenuItem.m_strMenuFileName).ToLower();
+								string str = smenuItem.m_strCateName + "/" + Path.GetFileNameWithoutExtension(smenuItem.m_strMenuFileName).ToLower();
 								string translation = LocalizationManager.GetTranslation(str + "|name", true, 0, true, false, null, null);
 								f_name = ((!string.IsNullOrEmpty(translation)) ? translation.Replace("《改行》", "\n") : smenuItem.m_strMenuName);
 							}

+ 18 - 1
Assembly-CSharp/UIWFConditionList.cs

@@ -157,11 +157,24 @@ public class UIWFConditionList : MonoBehaviour
 					{
 						Utility.ResizeUILabelFontSize(this.condition_label_list_[i], limitTextWidth);
 					}
-					this.width = Mathf.Max(this.width, this.condition_label_list_[i].width);
 				}
+				this.width = Mathf.Max(this.width, this.condition_label_list_[i].width);
 			}
 		}
 		this.width += this.widthMargin;
+		if (this.resizeWidgets != null)
+		{
+			int width = this.width;
+			int height = this.height;
+			foreach (UIWidget uiwidget in this.resizeWidgets)
+			{
+				if (uiwidget != null)
+				{
+					uiwidget.width = width + (int)this.resizeOffset.x;
+					uiwidget.height = height + (int)this.resizeOffset.y;
+				}
+			}
+		}
 		if (this.resizeUIEvent != null && this.resizeUIEvent.Count >= 1)
 		{
 			EventDelegate.Execute(this.resizeUIEvent);
@@ -172,6 +185,10 @@ public class UIWFConditionList : MonoBehaviour
 
 	public List<EventDelegate> resizeUIEvent = new List<EventDelegate>();
 
+	public List<UIWidget> resizeWidgets = new List<UIWidget>();
+
+	public Vector2 resizeOffset;
+
 	private int lastLimitTextWidth = -1;
 
 	private bool updateFlag;

+ 1 - 1
Assembly-CSharp/WindowPartsFingerPreset.cs

@@ -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", 1350);
+		XElement xelement = new XElement("GameVersion", 1430);
 		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[]

+ 8 - 0
Assembly-CSharp/YotogiManager.cs

@@ -834,6 +834,14 @@ public class YotogiManager : WfScreenManager
 		}
 	}
 
+	public YotogiManager.PlayingSkillData playing_skill
+	{
+		get
+		{
+			return this.play_mgr_.playingSkill;
+		}
+	}
+
 	public YotogiNullManager null_mgr
 	{
 		get

+ 5 - 1
Assembly-CSharp/YotogiParamBasicBar.cs

@@ -42,7 +42,11 @@ public class YotogiParamBasicBar : MonoBehaviour
 		this.maid_ = maid;
 		if (YotogiManager.instans != null && YotogiManager.instans.is_new_yotogi_mode)
 		{
-			UTY.GetChildObject(base.gameObject, "Mind/Name", false).GetComponent<UILabel>().text = "時間";
+			UILabel component = UTY.GetChildObject(base.gameObject, "Mind/Name", false).GetComponent<UILabel>();
+			if (component != null)
+			{
+				Utility.SetLocalizeTerm(component, "MaidStatus/時間", false);
+			}
 		}
 	}
 

+ 8 - 0
Assembly-CSharp/YotogiPlayManager.cs

@@ -9,6 +9,14 @@ using Yotogis;
 
 public class YotogiPlayManager : WfScreenChildren
 {
+	public YotogiManager.PlayingSkillData playingSkill
+	{
+		get
+		{
+			return this.playing_skill_;
+		}
+	}
+
 	public override void Awake()
 	{
 		base.Awake();

+ 31 - 7
Assembly-CSharp/Yotogis/Skill.cs

@@ -1009,7 +1009,18 @@ namespace Yotogis
 							{
 								cell_x++;
 								string cellAsString = stats_csv.GetCellAsString(cell_x++, cell_y);
-								NDebug.Assert(cellAsString == basic_data.name, cellAsString + ":" + basic_data.name + "コマンドの名前が不一致です");
+								NDebug.Assert(cellAsString == basic_data.name, string.Concat(new object[]
+								{
+									"エラー\nスキルID[",
+									basic_data.skill_id,
+									"]スキル名[",
+									basic_data.group_name,
+									"]\nコマンド名[",
+									basic_data.name,
+									"]のはずが[",
+									cellAsString,
+									"]でした。コマンドの名前が不一致です"
+								}));
 								this.excitement = stats_csv.GetCellAsInteger(cell_x++, cell_y);
 								this.mind = stats_csv.GetCellAsInteger(cell_x++, cell_y);
 								this.reason = stats_csv.GetCellAsInteger(cell_x++, cell_y);
@@ -1262,7 +1273,8 @@ namespace Yotogis
 				};
 				for (int m = 0; m < array6.Length; m++)
 				{
-					if (csv.GetCellAsString(num++, y) == "〇")
+					cellAsString = csv.GetCellAsString(num++, y);
+					if (cellAsString == "〇")
 					{
 						this.exec_seikeiken.Add(array6[m], true);
 					}
@@ -1276,7 +1288,8 @@ namespace Yotogis
 				};
 				for (int n = 0; n < array7.Length; n++)
 				{
-					if (csv.GetCellAsString(num++, y) == "〇")
+					cellAsString = csv.GetCellAsString(num++, y);
+					if (cellAsString == "〇")
 					{
 						this.exec_relation.Add(array7[n], true);
 					}
@@ -1344,7 +1357,7 @@ namespace Yotogis
 					string cellAsString3 = csv.GetCellAsString(num++, y);
 					if (string.IsNullOrEmpty(cellAsString2))
 					{
-						IL_6FD:
+						IL_701:
 						NDebug.Assert(command_data_cell_dic.ContainsKey(this.id), this.name + "の情報は見つかりませんでした");
 						int[] array10 = command_data_cell_dic[this.id];
 						this.command_basic_cell_y = array10[0];
@@ -1409,7 +1422,7 @@ namespace Yotogis
 						this.playable_stageid_list.Add(YotogiStage.uniqueNameToId(cellAsString2));
 					}
 				}
-				goto IL_6FD;
+				goto IL_701;
 			}
 
 			public void SetOldSkillData(Skill.Old.Data data)
@@ -2020,7 +2033,7 @@ namespace Yotogis
 						{
 							get
 							{
-								return "YotogiSkillName/" + this.group_name;
+								return this.skill.termName;
 							}
 						}
 
@@ -2079,7 +2092,18 @@ namespace Yotogis
 							{
 								NDebug.Assert(basic_data.skill.name + "の[" + basic_data.name + "]コマンドのステータス設定がありません", false);
 							}
-							NDebug.Assert(cellAsString == basic_data.name, cellAsString + ":" + basic_data.name + "コマンドの名前が不一致です");
+							NDebug.Assert(cellAsString == basic_data.name, string.Concat(new object[]
+							{
+								"エラー\nスキルID[",
+								basic_data.skill_id,
+								"]スキル名[",
+								basic_data.group_name,
+								"]\nコマンド名[",
+								basic_data.name,
+								"]のはずが[",
+								cellAsString,
+								"]でした。コマンドの名前が不一致です"
+							}));
 							if (stats_csv.IsCellToExistData(cell_x, cell_y) && stats_csv.IsCellToExistData(cell_x + 1, cell_y))
 							{
 								NDebug.Assert(basic_data.skill.name + "の[" + basic_data.name + "]コマンドのボーナス興奮値設定が不正です\n以上、以下二つデータを入れる事はできません", false);

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

@@ -213,10 +213,10 @@ namespace com.workman.cm3d2.scene.dailyEtc
 					List<CapsuleCollider> list = maidColliderCollect.AddCollider(MaidColliderCollect.ColliderType.Grab);
 					for (int i = 0; i < list.Count; i++)
 					{
-						ColliderEvent colliderEvent = list[i].gameObject.AddComponent<ColliderEvent>();
-						colliderEvent.onMouseDown = delegate()
+						ColliderEventVR colliderEventVR = list[i].gameObject.AddComponent<ColliderEventVR>();
+						colliderEventVR.onMouseDown = delegate()
 						{
-							if (UICamera.Raycast(Input.mousePosition) || BasePanelMgr.IsOpen())
+							if (BasePanelMgr.IsOpen())
 							{
 								return;
 							}

+ 34 - 5
Assembly-CSharp/uGUICanvas.cs

@@ -202,11 +202,23 @@ public class uGUICanvas : MonoBehaviour
 			}
 			uGUIUtility.SetActiveEventSystem(true);
 		}
-		this.m_IsRaycastHit = this.IsPointerHit();
+		bool flag = this.IsPointerHit();
 		if (this.NGUI_UICamera)
 		{
-			this.NGUI_UICamera.EnableProcess = (!this.m_SystemUI_UICamera.Hover && !this.m_IsRaycastHit);
+			this.NGUI_UICamera.EnableProcess = (!this.m_SystemUI_UICamera.Hover && !flag);
 		}
+		if (!NInput.GetMouseButton(1) && !NInput.GetMouseButton(2))
+		{
+			if (flag && GameMain.Instance.MainCamera.IsFallThrough)
+			{
+				GameMain.Instance.MainCamera.gameObject.SendMessage("OnHover", false, SendMessageOptions.DontRequireReceiver);
+			}
+			else if (!flag && this.m_IsRaycastHit)
+			{
+				GameMain.Instance.MainCamera.gameObject.SendMessage("OnHover", true, SendMessageOptions.DontRequireReceiver);
+			}
+		}
+		this.m_IsRaycastHit = flag;
 	}
 
 	private bool IsPointerHit()
@@ -219,9 +231,16 @@ public class uGUICanvas : MonoBehaviour
 		Vector2 position = Input.mousePosition;
 		PointerEventData pointerEventData = new PointerEventData(eventSystem);
 		pointerEventData.position = position;
-		List<RaycastResult> list = new List<RaycastResult>();
-		this.m_GraphicRaycaster.Raycast(pointerEventData, list);
-		return list.Count > 0;
+		foreach (GraphicRaycaster graphicRaycaster in base.GetComponentsInChildren<GraphicRaycaster>(false))
+		{
+			List<RaycastResult> list = new List<RaycastResult>();
+			graphicRaycaster.Raycast(pointerEventData, list);
+			if (list.Count > 0)
+			{
+				return true;
+			}
+		}
+		return false;
 	}
 
 	private void OnReset()
@@ -284,6 +303,11 @@ public class uGUICanvas : MonoBehaviour
 		{
 			this.m_NGUI_UICamera.EnableProcess = true;
 		}
+		if (GameMain.Instance == null || GameMain.Instance.MainCamera == null || GameMain.Instance.MainCamera.gameObject == null)
+		{
+			return;
+		}
+		GameMain.Instance.MainCamera.gameObject.SendMessage("OnHover", true, SendMessageOptions.DontRequireReceiver);
 	}
 
 	private void OnDisable()
@@ -296,6 +320,11 @@ public class uGUICanvas : MonoBehaviour
 		{
 			this.m_NGUI_UICamera.EnableProcess = true;
 		}
+		if (GameMain.Instance == null || GameMain.Instance.MainCamera == null || GameMain.Instance.MainCamera.gameObject == null)
+		{
+			return;
+		}
+		GameMain.Instance.MainCamera.gameObject.SendMessage("OnHover", true, SendMessageOptions.DontRequireReceiver);
 	}
 
 	[SerializeField]