|  | @@ -467,14 +467,27 @@ public class FreeSkillSelect : MonoBehaviour
 | 
	
		
			
				|  |  |  		this.select_skill_ = skill_data.skill_data;
 | 
	
		
			
				|  |  |  		this.CreateStage(skill_data.skill_data);
 | 
	
		
			
				|  |  |  		FreeSkillSelect.ButtonData buttonData = (skill_data.parent == null) ? null : ((skill_data.parent.parent == null) ? null : skill_data.parent.parent);
 | 
	
		
			
				|  |  | -		FreeSkillSelect.RootType rootType = (buttonData == null) ? FreeSkillSelect.RootType.Null : buttonData.root_type;
 | 
	
		
			
				|  |  | -		if (FreeSkillSelect.RootType.GP01Harem <= rootType && rootType <= FreeSkillSelect.RootType.GP02Yuri)
 | 
	
		
			
				|  |  | +		string item = (buttonData == null) ? FreeSkillSelect.RootType.Null.ToString() : buttonData.root_type;
 | 
	
		
			
				|  |  | +		HashSet<string> hashSet = new HashSet<string>();
 | 
	
		
			
				|  |  | +		foreach (FreeSkillSelect.RootType rootType in new FreeSkillSelect.RootType[]
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			FreeSkillSelect.RootType.Null,
 | 
	
		
			
				|  |  | +			FreeSkillSelect.RootType.Drunk,
 | 
	
		
			
				|  |  | +			FreeSkillSelect.RootType.Mask,
 | 
	
		
			
				|  |  | +			FreeSkillSelect.RootType.Drug,
 | 
	
		
			
				|  |  | +			FreeSkillSelect.RootType.Faint,
 | 
	
		
			
				|  |  | +			FreeSkillSelect.RootType.Confess
 | 
	
		
			
				|  |  | +		})
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			hashSet.Add(rootType.ToString());
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		if (!hashSet.Contains(item))
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  |  			List<Transform> childList = this.update_obj_dic_["レベル"].ui_grid.GetChildList();
 | 
	
		
			
				|  |  |  			bool flag = true;
 | 
	
		
			
				|  |  | -			for (int i = childList.Count - 1; i >= 0; i--)
 | 
	
		
			
				|  |  | +			for (int j = childList.Count - 1; j >= 0; j--)
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  | -				UIWFTabButton componentInChildren = childList[i].gameObject.GetComponentInChildren<UIWFTabButton>();
 | 
	
		
			
				|  |  | +				UIWFTabButton componentInChildren = childList[j].gameObject.GetComponentInChildren<UIWFTabButton>();
 | 
	
		
			
				|  |  |  				if (!(componentInChildren == null) && componentInChildren.isEnabled)
 | 
	
		
			
				|  |  |  				{
 | 
	
		
			
				|  |  |  					if (flag)
 | 
	
	
		
			
				|  | @@ -492,9 +505,9 @@ public class FreeSkillSelect : MonoBehaviour
 | 
	
		
			
				|  |  |  		else
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  |  			List<Transform> childList2 = this.update_obj_dic_["レベル"].ui_grid.GetChildList();
 | 
	
		
			
				|  |  | -			for (int j = 0; j < childList2.Count; j++)
 | 
	
		
			
				|  |  | +			for (int k = 0; k < childList2.Count; k++)
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  | -				UIWFTabButton componentInChildren2 = childList2[j].gameObject.GetComponentInChildren<UIWFTabButton>();
 | 
	
		
			
				|  |  | +				UIWFTabButton componentInChildren2 = childList2[k].gameObject.GetComponentInChildren<UIWFTabButton>();
 | 
	
		
			
				|  |  |  				if (!(componentInChildren2 == null))
 | 
	
		
			
				|  |  |  				{
 | 
	
		
			
				|  |  |  					componentInChildren2.isEnabled = true;
 | 
	
	
		
			
				|  | @@ -518,56 +531,74 @@ public class FreeSkillSelect : MonoBehaviour
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	private static List<FreeSkillSelect.ButtonData> CreateButtonData(Maid maid, HashSet<int> selectableStageIds)
 | 
	
		
			
				|  |  |  	{
 | 
	
		
			
				|  |  | -		List<FreeSkillSelect.ButtonData> list = new List<FreeSkillSelect.ButtonData>();
 | 
	
		
			
				|  |  | -		Dictionary<FreeSkillSelect.RootType, KeyValuePair<FreeSkillSelect.ButtonData, Dictionary<string, FreeSkillSelect.ButtonData>>> type_data_dic = new Dictionary<FreeSkillSelect.RootType, KeyValuePair<FreeSkillSelect.ButtonData, Dictionary<string, FreeSkillSelect.ButtonData>>>();
 | 
	
		
			
				|  |  | -		List<KeyValuePair<FreeSkillSelect.RootType, string>> list2 = new List<KeyValuePair<FreeSkillSelect.RootType, string>>();
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.Null, "通常"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.Drunk, "酔い"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.Mask, "目隠し"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.Drug, "媚薬"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.Confess, "告白"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.Faint, "気絶"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.GP01Harem, "GP-01ハーレム"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.GP01Swapping, "GP-01スワッピング"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.GP01NTR, "GP-01寝取らせ"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.GP01NTRReport, "GP-01寝取らせ報告"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.GP02Harem, "GP-02ハーレム"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.GP02Swapping, "GP-02スワッピング"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.GP02NTR, "GP-02寝取らせ"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.GP02NTRReport, "GP-02寝取らせ報告"));
 | 
	
		
			
				|  |  | -		list2.Add(new KeyValuePair<FreeSkillSelect.RootType, string>(FreeSkillSelect.RootType.GP02Yuri, "GP-02百合"));
 | 
	
		
			
				|  |  | -		for (int i = 0; i < list2.Count; i++)
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			FreeSkillSelect.ButtonData buttonData = new FreeSkillSelect.ButtonData();
 | 
	
		
			
				|  |  | -			buttonData.children_list = new List<FreeSkillSelect.ButtonData>();
 | 
	
		
			
				|  |  | -			buttonData.name = list2[i].Value;
 | 
	
		
			
				|  |  | -			buttonData.nameTerm = "SceneYotogi/スキル所属/" + buttonData.name;
 | 
	
		
			
				|  |  | -			buttonData.root_type = list2[i].Key;
 | 
	
		
			
				|  |  | -			list.Add(buttonData);
 | 
	
		
			
				|  |  | -			type_data_dic.Add(buttonData.root_type, new KeyValuePair<FreeSkillSelect.ButtonData, Dictionary<string, FreeSkillSelect.ButtonData>>(buttonData, new Dictionary<string, FreeSkillSelect.ButtonData>()));
 | 
	
		
			
				|  |  | -		}
 | 
	
		
			
				|  |  | -		for (int j = 0; j < list.Count; j++)
 | 
	
		
			
				|  |  | -		{
 | 
	
		
			
				|  |  | -			for (int k = 0; k < 8; k++)
 | 
	
		
			
				|  |  | -			{
 | 
	
		
			
				|  |  | -				FreeSkillSelect.ButtonData buttonData2 = list[j];
 | 
	
		
			
				|  |  | -				FreeSkillSelect.ButtonData buttonData3 = new FreeSkillSelect.ButtonData();
 | 
	
		
			
				|  |  | -				buttonData3.children_list = new List<FreeSkillSelect.ButtonData>();
 | 
	
		
			
				|  |  | -				FreeSkillSelect.ButtonData buttonData4 = buttonData3;
 | 
	
		
			
				|  |  | -				Yotogi.Category category = (Yotogi.Category)k;
 | 
	
		
			
				|  |  | -				buttonData4.name = category.ToString();
 | 
	
		
			
				|  |  | -				buttonData3.nameTerm = "SceneYotogi/スキルカテゴリー/" + buttonData3.name;
 | 
	
		
			
				|  |  | -				buttonData3.parent = buttonData2;
 | 
	
		
			
				|  |  | -				buttonData2.children_list.Add(buttonData3);
 | 
	
		
			
				|  |  | -				type_data_dic[list[j].root_type].Value.Add(buttonData3.name, buttonData3);
 | 
	
		
			
				|  |  | +		List<FreeSkillSelect.ButtonData> top_btn_data_list = new List<FreeSkillSelect.ButtonData>();
 | 
	
		
			
				|  |  | +		Dictionary<string, KeyValuePair<FreeSkillSelect.ButtonData, Dictionary<string, FreeSkillSelect.ButtonData>>> type_data_dic = new Dictionary<string, KeyValuePair<FreeSkillSelect.ButtonData, Dictionary<string, FreeSkillSelect.ButtonData>>>();
 | 
	
		
			
				|  |  | +		List<KeyValuePair<string, string>> baseCategoryDefine = new List<KeyValuePair<string, string>>();
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.Null.ToString(), "通常"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.Drunk.ToString(), "酔い"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.Mask.ToString(), "目隠し"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.Drug.ToString(), "媚薬"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.Confess.ToString(), "告白"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.Faint.ToString(), "気絶"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.GP01Harem.ToString(), "GP-01ハーレム"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.GP01Swapping.ToString(), "GP-01スワッピング"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.GP01NTR.ToString(), "GP-01寝取らせ"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.GP01NTRReport.ToString(), "GP-01寝取らせ報告"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.GP02Harem.ToString(), "GP-02ハーレム"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.GP02Swapping.ToString(), "GP-02スワッピング"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.GP02NTR.ToString(), "GP-02寝取らせ"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.GP02NTRReport.ToString(), "GP-02寝取らせ報告"));
 | 
	
		
			
				|  |  | +		baseCategoryDefine.Add(new KeyValuePair<string, string>(FreeSkillSelect.RootType.GP02Yuri.ToString(), "GP-02百合"));
 | 
	
		
			
				|  |  | +		Func<string, KeyValuePair<FreeSkillSelect.ButtonData, Dictionary<string, FreeSkillSelect.ButtonData>>> func = delegate(string typeName)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			KeyValuePair<FreeSkillSelect.ButtonData, Dictionary<string, FreeSkillSelect.ButtonData>> result;
 | 
	
		
			
				|  |  | +			if (type_data_dic.TryGetValue(typeName, out result))
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				return result;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			FreeSkillSelect.ButtonData buttonData4 = new FreeSkillSelect.ButtonData();
 | 
	
		
			
				|  |  | +			buttonData4.children_list = new List<FreeSkillSelect.ButtonData>();
 | 
	
		
			
				|  |  | +			foreach (KeyValuePair<string, string> keyValuePair3 in baseCategoryDefine)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				if (!(keyValuePair3.Key != typeName))
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +					buttonData4.name = keyValuePair3.Value;
 | 
	
		
			
				|  |  | +					break;
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | +			if (string.IsNullOrEmpty(buttonData4.name))
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				buttonData4.name = typeName;
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			buttonData4.nameTerm = "SceneYotogi/スキル所属/" + buttonData4.name;
 | 
	
		
			
				|  |  | +			buttonData4.root_type = typeName;
 | 
	
		
			
				|  |  | +			top_btn_data_list.Add(buttonData4);
 | 
	
		
			
				|  |  | +			type_data_dic.Add(buttonData4.root_type, new KeyValuePair<FreeSkillSelect.ButtonData, Dictionary<string, FreeSkillSelect.ButtonData>>(buttonData4, new Dictionary<string, FreeSkillSelect.ButtonData>()));
 | 
	
		
			
				|  |  | +			FreeSkillSelect.ButtonData buttonData5 = top_btn_data_list[top_btn_data_list.Count - 1];
 | 
	
		
			
				|  |  | +			for (int l = 0; l < 8; l++)
 | 
	
		
			
				|  |  | +			{
 | 
	
		
			
				|  |  | +				FreeSkillSelect.ButtonData buttonData6 = new FreeSkillSelect.ButtonData();
 | 
	
		
			
				|  |  | +				buttonData6.children_list = new List<FreeSkillSelect.ButtonData>();
 | 
	
		
			
				|  |  | +				FreeSkillSelect.ButtonData buttonData7 = buttonData6;
 | 
	
		
			
				|  |  | +				Yotogi.Category category2 = (Yotogi.Category)l;
 | 
	
		
			
				|  |  | +				buttonData7.name = category2.ToString();
 | 
	
		
			
				|  |  | +				buttonData6.nameTerm = "SceneYotogi/スキルカテゴリー/" + buttonData6.name;
 | 
	
		
			
				|  |  | +				buttonData6.parent = buttonData5;
 | 
	
		
			
				|  |  | +				buttonData5.children_list.Add(buttonData6);
 | 
	
		
			
				|  |  | +				type_data_dic[buttonData5.root_type].Value.Add(buttonData6.name, buttonData6);
 | 
	
		
			
				|  |  | +			}
 | 
	
		
			
				|  |  | +			return type_data_dic[buttonData4.root_type];
 | 
	
		
			
				|  |  | +		};
 | 
	
		
			
				|  |  | +		for (int i = 0; i < baseCategoryDefine.Count; i++)
 | 
	
		
			
				|  |  | +		{
 | 
	
		
			
				|  |  | +			func(baseCategoryDefine[i].Key);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  |  		CharacterMgr characterMgr = GameMain.Instance.CharacterMgr;
 | 
	
		
			
				|  |  |  		int[] keyArray = maid.status.yotogiSkill.datas.GetKeyArray();
 | 
	
		
			
				|  |  |  		Dictionary<int, List<Skill.Data>> dictionary = new Dictionary<int, List<Skill.Data>>();
 | 
	
		
			
				|  |  | -		for (int l = 0; l < keyArray.Length; l++)
 | 
	
		
			
				|  |  | +		for (int j = 0; j < keyArray.Length; j++)
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  | -			Skill.Data data = Skill.Get(keyArray[l]);
 | 
	
		
			
				|  |  | +			Skill.Data data = Skill.Get(keyArray[j]);
 | 
	
		
			
				|  |  |  			if (data.specialConditionType != Skill.Data.SpecialConditionType.NewType)
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  |  				if (PersonalEventBlocker.IsEnabledYotodiSkill(maid.status.personal, data.id))
 | 
	
	
		
			
				|  | @@ -585,12 +616,12 @@ public class FreeSkillSelect : MonoBehaviour
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  						if (flag)
 | 
	
		
			
				|  |  |  						{
 | 
	
		
			
				|  |  | -							int category2 = (int)data.category;
 | 
	
		
			
				|  |  | -							if (!dictionary.ContainsKey(category2))
 | 
	
		
			
				|  |  | +							int category = (int)data.category;
 | 
	
		
			
				|  |  | +							if (!dictionary.ContainsKey(category))
 | 
	
		
			
				|  |  |  							{
 | 
	
		
			
				|  |  | -								dictionary.Add(category2, new List<Skill.Data>());
 | 
	
		
			
				|  |  | +								dictionary.Add(category, new List<Skill.Data>());
 | 
	
		
			
				|  |  |  							}
 | 
	
		
			
				|  |  | -							dictionary[category2].Add(data);
 | 
	
		
			
				|  |  | +							dictionary[category].Add(data);
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  |  				}
 | 
	
	
		
			
				|  | @@ -601,24 +632,24 @@ public class FreeSkillSelect : MonoBehaviour
 | 
	
		
			
				|  |  |  			List<Skill.Data> value = keyValuePair.Value;
 | 
	
		
			
				|  |  |  			value.Sort((Skill.Data a, Skill.Data b) => a.sortId - b.sortId);
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		List<Skill.Data> list3 = new List<Skill.Data>();
 | 
	
		
			
				|  |  | +		List<Skill.Data> list = new List<Skill.Data>();
 | 
	
		
			
				|  |  |  		foreach (KeyValuePair<int, List<Skill.Data>> keyValuePair2 in dictionary)
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  |  			List<Skill.Data> value2 = keyValuePair2.Value;
 | 
	
		
			
				|  |  |  			foreach (Skill.Data item2 in value2)
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  | -				list3.Add(item2);
 | 
	
		
			
				|  |  | +				list.Add(item2);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		foreach (Skill.Data data2 in list3)
 | 
	
		
			
				|  |  | +		foreach (Skill.Data data2 in list)
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  |  			int user_player_num = data2.user_player_num;
 | 
	
		
			
				|  |  |  			if (1 < user_player_num)
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  |  				int num = 0;
 | 
	
		
			
				|  |  | -				for (int m = 0; m < characterMgr.GetMaidCount(); m++)
 | 
	
		
			
				|  |  | +				for (int k = 0; k < characterMgr.GetMaidCount(); k++)
 | 
	
		
			
				|  |  |  				{
 | 
	
		
			
				|  |  | -					if (!(characterMgr.GetMaid(m) != null))
 | 
	
		
			
				|  |  | +					if (!(characterMgr.GetMaid(k) != null))
 | 
	
		
			
				|  |  |  					{
 | 
	
		
			
				|  |  |  						break;
 | 
	
		
			
				|  |  |  					}
 | 
	
	
		
			
				|  | @@ -631,94 +662,102 @@ public class FreeSkillSelect : MonoBehaviour
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  			if (data2.IsExecMaid(maid.status))
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  | -				FreeSkillSelect.RootType key;
 | 
	
		
			
				|  |  | +				string arg = FreeSkillSelect.RootType.Null.ToString();
 | 
	
		
			
				|  |  |  				if (Skill.Data.SpecialConditionType.Null <= data2.specialConditionType && data2.specialConditionType <= Skill.Data.SpecialConditionType.Confess)
 | 
	
		
			
				|  |  |  				{
 | 
	
		
			
				|  |  | -					key = (FreeSkillSelect.RootType)data2.specialConditionType;
 | 
	
		
			
				|  |  | +					arg = ((FreeSkillSelect.RootType)data2.specialConditionType).ToString();
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  				else if (data2.specialConditionType == Skill.Data.SpecialConditionType.GP01Recollect)
 | 
	
		
			
				|  |  |  				{
 | 
	
		
			
				|  |  | +					FreeSkillSelect.RootType rootType;
 | 
	
		
			
				|  |  |  					if (data2.category == Yotogi.Category.ハ\u30FCレム)
 | 
	
		
			
				|  |  |  					{
 | 
	
		
			
				|  |  | -						key = FreeSkillSelect.RootType.GP01Harem;
 | 
	
		
			
				|  |  | +						rootType = FreeSkillSelect.RootType.GP01Harem;
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  |  					else
 | 
	
		
			
				|  |  |  					{
 | 
	
		
			
				|  |  | -						key = FreeSkillSelect.RootType.GP01Swapping;
 | 
	
		
			
				|  |  | +						rootType = FreeSkillSelect.RootType.GP01Swapping;
 | 
	
		
			
				|  |  |  						if (data2.name.Contains("報告"))
 | 
	
		
			
				|  |  |  						{
 | 
	
		
			
				|  |  | -							key = FreeSkillSelect.RootType.GP01NTRReport;
 | 
	
		
			
				|  |  | +							rootType = FreeSkillSelect.RootType.GP01NTRReport;
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  						else if (data2.name.Contains("寝取り"))
 | 
	
		
			
				|  |  |  						{
 | 
	
		
			
				|  |  | -							key = FreeSkillSelect.RootType.GP01NTR;
 | 
	
		
			
				|  |  | +							rootType = FreeSkillSelect.RootType.GP01NTR;
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  | +					arg = rootType.ToString();
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  | -				else
 | 
	
		
			
				|  |  | +				else if (data2.specialConditionType == Skill.Data.SpecialConditionType.GP02Recollect)
 | 
	
		
			
				|  |  |  				{
 | 
	
		
			
				|  |  | -					if (data2.specialConditionType != Skill.Data.SpecialConditionType.GP02Recollect)
 | 
	
		
			
				|  |  | -					{
 | 
	
		
			
				|  |  | -						continue;
 | 
	
		
			
				|  |  | -					}
 | 
	
		
			
				|  |  | +					FreeSkillSelect.RootType rootType2;
 | 
	
		
			
				|  |  |  					if (data2.category == Yotogi.Category.ハ\u30FCレム)
 | 
	
		
			
				|  |  |  					{
 | 
	
		
			
				|  |  |  						if (data2.name.Contains("百合"))
 | 
	
		
			
				|  |  |  						{
 | 
	
		
			
				|  |  | -							key = FreeSkillSelect.RootType.GP02Yuri;
 | 
	
		
			
				|  |  | +							rootType2 = FreeSkillSelect.RootType.GP02Yuri;
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  						else
 | 
	
		
			
				|  |  |  						{
 | 
	
		
			
				|  |  | -							key = FreeSkillSelect.RootType.GP02Harem;
 | 
	
		
			
				|  |  | +							rootType2 = FreeSkillSelect.RootType.GP02Harem;
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  |  					else
 | 
	
		
			
				|  |  |  					{
 | 
	
		
			
				|  |  | -						key = FreeSkillSelect.RootType.GP02Swapping;
 | 
	
		
			
				|  |  | +						rootType2 = FreeSkillSelect.RootType.GP02Swapping;
 | 
	
		
			
				|  |  |  						if (data2.name.Contains("報告"))
 | 
	
		
			
				|  |  |  						{
 | 
	
		
			
				|  |  | -							key = FreeSkillSelect.RootType.GP02NTRReport;
 | 
	
		
			
				|  |  | +							rootType2 = FreeSkillSelect.RootType.GP02NTRReport;
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  						else if (data2.name.Contains("寝取り"))
 | 
	
		
			
				|  |  |  						{
 | 
	
		
			
				|  |  | -							key = FreeSkillSelect.RootType.GP02NTR;
 | 
	
		
			
				|  |  | +							rootType2 = FreeSkillSelect.RootType.GP02NTR;
 | 
	
		
			
				|  |  |  						}
 | 
	
		
			
				|  |  |  					}
 | 
	
		
			
				|  |  | +					arg = rootType2.ToString();
 | 
	
		
			
				|  |  | +				}
 | 
	
		
			
				|  |  | +				else
 | 
	
		
			
				|  |  | +				{
 | 
	
		
			
				|  |  | +					if (data2.specialConditionType != Skill.Data.SpecialConditionType.OnlyRecollect)
 | 
	
		
			
				|  |  | +					{
 | 
	
		
			
				|  |  | +						continue;
 | 
	
		
			
				|  |  | +					}
 | 
	
		
			
				|  |  | +					arg = (string.IsNullOrEmpty(data2.customRecollectionCategoryName) ? "-" : data2.customRecollectionCategoryName);
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  | -				FreeSkillSelect.ButtonData buttonData5 = type_data_dic[key].Value[data2.category.ToString()];
 | 
	
		
			
				|  |  | -				if (buttonData5 != null)
 | 
	
		
			
				|  |  | +				FreeSkillSelect.ButtonData buttonData = func(arg).Value[data2.category.ToString()];
 | 
	
		
			
				|  |  | +				if (buttonData != null)
 | 
	
		
			
				|  |  |  				{
 | 
	
		
			
				|  |  | -					FreeSkillSelect.ButtonData buttonData6 = new FreeSkillSelect.ButtonData();
 | 
	
		
			
				|  |  | -					buttonData6.parent = buttonData5;
 | 
	
		
			
				|  |  | -					buttonData6.name = data2.name;
 | 
	
		
			
				|  |  | -					buttonData6.skill_data = data2;
 | 
	
		
			
				|  |  | -					buttonData5.children_list.Add(buttonData6);
 | 
	
		
			
				|  |  | +					FreeSkillSelect.ButtonData buttonData2 = new FreeSkillSelect.ButtonData();
 | 
	
		
			
				|  |  | +					buttonData2.parent = buttonData;
 | 
	
		
			
				|  |  | +					buttonData2.name = data2.name;
 | 
	
		
			
				|  |  | +					buttonData2.skill_data = data2;
 | 
	
		
			
				|  |  | +					buttonData.children_list.Add(buttonData2);
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		Action<FreeSkillSelect.RootType> action = delegate(FreeSkillSelect.RootType type)
 | 
	
		
			
				|  |  | +		Action<string> action = delegate(string type)
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  |  			Dictionary<string, FreeSkillSelect.ButtonData> value3 = type_data_dic[type].Value;
 | 
	
		
			
				|  |  |  			HashSet<string> hashSet = new HashSet<string>();
 | 
	
		
			
				|  |  | -			List<FreeSkillSelect.ButtonData> list4 = new List<FreeSkillSelect.ButtonData>();
 | 
	
		
			
				|  |  | +			List<FreeSkillSelect.ButtonData> list2 = new List<FreeSkillSelect.ButtonData>();
 | 
	
		
			
				|  |  |  			foreach (KeyValuePair<string, FreeSkillSelect.ButtonData> keyValuePair3 in value3)
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  |  				if (keyValuePair3.Value.children_list != null && 1 <= keyValuePair3.Value.children_list.Count && !hashSet.Contains(keyValuePair3.Key))
 | 
	
		
			
				|  |  |  				{
 | 
	
		
			
				|  |  |  					hashSet.Add(keyValuePair3.Key);
 | 
	
		
			
				|  |  | -					list4.Add(keyValuePair3.Value);
 | 
	
		
			
				|  |  | +					list2.Add(keyValuePair3.Value);
 | 
	
		
			
				|  |  |  				}
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  | -			type_data_dic[type].Key.children_list = list4;
 | 
	
		
			
				|  |  | +			type_data_dic[type].Key.children_list = list2;
 | 
	
		
			
				|  |  |  		};
 | 
	
		
			
				|  |  | -		foreach (FreeSkillSelect.ButtonData buttonData7 in list)
 | 
	
		
			
				|  |  | +		foreach (FreeSkillSelect.ButtonData buttonData3 in top_btn_data_list)
 | 
	
		
			
				|  |  |  		{
 | 
	
		
			
				|  |  | -			if (buttonData7.root_type != FreeSkillSelect.RootType.Null)
 | 
	
		
			
				|  |  | +			if (buttonData3.root_type != FreeSkillSelect.RootType.Null.ToString())
 | 
	
		
			
				|  |  |  			{
 | 
	
		
			
				|  |  | -				action(buttonData7.root_type);
 | 
	
		
			
				|  |  | +				action(buttonData3.root_type);
 | 
	
		
			
				|  |  |  			}
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | -		return list;
 | 
	
		
			
				|  |  | +		return top_btn_data_list;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	private static FreeSkillSelect.ButtonData GetButtonData(List<FreeSkillSelect.ButtonData> check_list, string name)
 | 
	
	
		
			
				|  | @@ -807,7 +846,7 @@ public class FreeSkillSelect : MonoBehaviour
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  		public Skill.Data skill_data;
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  | -		public FreeSkillSelect.RootType root_type;
 | 
	
		
			
				|  |  | +		public string root_type;
 | 
	
		
			
				|  |  |  	}
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |  	private class UpdateObject
 |