private void CreateSlots()
        {
            this.DestroyPartySlotObjects();
            List <PartySlotData> mainSlotData    = new List <PartySlotData>();
            List <PartySlotData> subSlotData     = new List <PartySlotData>();
            PartySlotData        supportSlotData = (PartySlotData)null;

            PartyUtility.CreatePartySlotData(this.mCurrentQuest, out mainSlotData, out subSlotData, out supportSlotData);
            List <GenericSlot> genericSlotList = new List <GenericSlot>();

            if (UnityEngine.Object.op_Inequality((UnityEngine.Object) this.MainMemberHolder, (UnityEngine.Object)null) && mainSlotData.Count > 0)
            {
                using (List <PartySlotData> .Enumerator enumerator = mainSlotData.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        PartySlotData current     = enumerator.Current;
                        GenericSlot   genericSlot = current.Type == PartySlotType.Npc || current.Type == PartySlotType.NpcHero ? this.CreateSlotObject(current, this.NpcSlotTemplate, this.MainMemberHolder) : this.CreateSlotObject(current, this.UnitSlotTemplate, this.MainMemberHolder);
                        genericSlotList.Add(genericSlot);
                    }
                }
                if (supportSlotData != null)
                {
                    this.FriendSlot = this.CreateSlotObject(supportSlotData, this.UnitSlotTemplate, this.MainMemberHolder);
                }
            }
            if (UnityEngine.Object.op_Inequality((UnityEngine.Object) this.SubMemberHolder, (UnityEngine.Object)null) && subSlotData.Count > 0)
            {
                using (List <PartySlotData> .Enumerator enumerator = subSlotData.GetEnumerator())
                {
                    while (enumerator.MoveNext())
                    {
                        PartySlotData current     = enumerator.Current;
                        GenericSlot   genericSlot = current.Type == PartySlotType.Npc || current.Type == PartySlotType.NpcHero ? this.CreateSlotObject(current, this.NpcSlotTemplate, this.SubMemberHolder) : this.CreateSlotObject(current, this.UnitSlotTemplate, this.SubMemberHolder);
                        genericSlotList.Add(genericSlot);
                    }
                }
            }
            this.mSlotData.AddRange((IEnumerable <PartySlotData>)mainSlotData);
            this.mSlotData.AddRange((IEnumerable <PartySlotData>)subSlotData);
            this.UnitSlots = genericSlotList.ToArray();
            if (UnityEngine.Object.op_Inequality((UnityEngine.Object) this.FriendSlot, (UnityEngine.Object)null) && this.mCurrentQuest != null && this.mCurrentQuest.type == QuestTypes.Tower)
            {
                TowerFloorParam towerFloor = MonoSingleton <GameManager> .Instance.FindTowerFloor(this.mCurrentQuest.iname);

                if (towerFloor != null)
                {
                    ((Component)this.FriendSlot).get_gameObject().SetActive(towerFloor.can_help);
                    ((Component)this.SupportSkill).get_gameObject().SetActive(towerFloor.can_help);
                }
            }
            this.mGuestUnits = new List <UnitData>();
            PartyUtility.MergePartySlotWithPartyUnits(this.mCurrentQuest, this.mSlotData, this.mCurrentParty, this.mGuestUnits, this.mIsUserOwnUnits);
            this.ReflectionUnitSlot();
        }