public void GetChapterAward(int chapterID, int type, Action callback = null) { ZhuXianZhangJiePeiZhi zhuXianZhangJiePeiZhi = DataReader <ZhuXianZhangJiePeiZhi> .DataList.Find((ZhuXianZhangJiePeiZhi a) => a.chapterOrder == chapterID && a.chapterType == type); if (zhuXianZhangJiePeiZhi == null) { if (callback != null) { callback.Invoke(); } return; } bool flag = false; for (int i = 0; i < zhuXianZhangJiePeiZhi.needStar.get_Count(); i++) { int key = this.MakeBoxRewardID(zhuXianZhangJiePeiZhi.id, type, zhuXianZhangJiePeiZhi.needStar.get_Item(i)); if (!this.m_mapChapterAwards.ContainsKey(key)) { flag = true; break; } } if (flag) { this.SendGetChapterAwardDataReq(zhuXianZhangJiePeiZhi.id, callback); } else if (callback != null) { callback.Invoke(); } }
public static void OpenInstanceUI(int instanceID, bool hideTheVisible = false, UIType type = UIType.FullScreen) { InstanceManagerUI.InstanceID = instanceID; ZhuXianPeiZhi zhuXianPeiZhi = DataReader <ZhuXianPeiZhi> .Get(instanceID); int chapterID = zhuXianPeiZhi.chapterId; ZhuXianZhangJiePeiZhi zhuXianZhangJiePeiZhi = DataReader <ZhuXianZhangJiePeiZhi> .Get(chapterID); List <ChapterInfo> dataByInstanceType = DungeonManager.Instance.GetDataByInstanceType(zhuXianZhangJiePeiZhi.chapterType); if (dataByInstanceType.get_Count() == 0 || dataByInstanceType.Find((ChapterInfo a) => a.chapterId == chapterID) == null) { DungeonManager.Instance.SendGetDungeonDataReq(chapterID, (DungeonType.ENUM)zhuXianZhangJiePeiZhi.chapterType, delegate { InstanceManagerUI.OpenInstanceUI(instanceID, hideTheVisible, type); }); return; } FuBenJiChuPeiZhi fuBenJiChuPeiZhi = DataReader <FuBenJiChuPeiZhi> .Get(instanceID); if (fuBenJiChuPeiZhi.type == 103) { InstanceSelectUI instanceSelectUI = UIManagerControl.Instance.OpenUI("InstanceSelectUI", null, true, UIType.FullScreen) as InstanceSelectUI; instanceSelectUI.RefreshUIByInstanceID(instanceID); } else { InstanceSelectUI instanceSelectUI2 = UIManagerControl.Instance.OpenUI("InstanceSelectUI", null, true, UIType.FullScreen) as InstanceSelectUI; instanceSelectUI2.RefreshUIByInstanceID(instanceID); InstanceDetailUI instanceDetailUI = UIManagerControl.Instance.OpenUI("InstanceDetailUI", null, false, UIType.Pop) as InstanceDetailUI; instanceDetailUI.RefreshUI(instanceID); } }
private void OnClickIslandItem(GameObject sender) { Debug.LogError("sender.name " + sender.get_name()); ZhuXianZhangJiePeiZhi zhuXianZhangJiePeiZhi = DataReader <ZhuXianZhangJiePeiZhi> .Get(int.Parse(sender.get_name())); this.RefreshUI(zhuXianZhangJiePeiZhi.chapterOrder, InstanceSelectUI.currentDungeonType); }
private void ResetImageIslands(int chapter, DungeonType.ENUM dungeonType) { int num = 0; bool flag = false; for (int i = 0; i < this.listData.get_Count(); i++) { ChapterInfo chapterInfo = this.listData.get_Item(i); for (int j = 0; j < chapterInfo.dungeons.get_Count(); j++) { DungeonInfo dungeonInfo = chapterInfo.dungeons.get_Item(j); if (!dungeonInfo.clearance) { num = i; flag = true; break; } } if (flag) { break; } } for (int k = 0; k < this.listIsland.get_Count(); k++) { Object.Destroy(this.listIsland.get_Item(k)); } this.listIsland.Clear(); for (int l = 0; l <= num; l++) { ChapterInfo chapterInfo2 = this.listData.get_Item(l); ZhuXianZhangJiePeiZhi zhuXianZhangJiePeiZhi = DataReader <ZhuXianZhangJiePeiZhi> .Get(chapterInfo2.chapterId); if (zhuXianZhangJiePeiZhi.mainSenceIcon != 0) { GameObject gameObject = new GameObject(chapterInfo2.chapterId.ToString()); gameObject.get_transform().set_parent(this.Islands); this.listIsland.Add(gameObject); Image image = gameObject.AddComponent <Image>(); ResourceManager.SetSprite(image, ResourceManager.GetIconSprite(DataReader <Icon> .Get(zhuXianZhangJiePeiZhi.mainSenceIcon).icon)); RectTransform component = gameObject.GetComponent <RectTransform>(); component.set_localPosition(new Vector2((float)zhuXianZhangJiePeiZhi.mainSenceIconPoint.get_Item(0), (float)zhuXianZhangJiePeiZhi.mainSenceIconPoint.get_Item(1))); component.set_localScale(Vector3.get_one()); image.SetNativeSize(); ButtonCustom buttonCustom = gameObject.AddComponent <ButtonCustom>(); buttonCustom.onClickCustom = new ButtonCustom.VoidDelegateObj(this.OnClickIslandItem); } } }
public bool IsFinish(int instanceID) { if (instanceID <= 0) { return(false); } FuBenJiChuPeiZhi fuBenJiChuPeiZhi = DataReader <FuBenJiChuPeiZhi> .Get(instanceID); if (fuBenJiChuPeiZhi == null) { return(false); } List <ChapterInfo> dataByInstanceType = this.GetDataByInstanceType(fuBenJiChuPeiZhi.type); if (dataByInstanceType == null) { return(false); } ZhuXianPeiZhi zhuXianPeiZhi = DataReader <ZhuXianPeiZhi> .Get(instanceID); if (zhuXianPeiZhi == null) { return(false); } ZhuXianZhangJiePeiZhi zhuXianZhangJiePeiZhi = DataReader <ZhuXianZhangJiePeiZhi> .Get(zhuXianPeiZhi.chapterId); if (zhuXianZhangJiePeiZhi == null) { return(false); } if (zhuXianZhangJiePeiZhi.chapterOrder - 1 < 0 || zhuXianZhangJiePeiZhi.chapterOrder - 1 >= dataByInstanceType.get_Count()) { return(false); } ChapterInfo chapterInfo = dataByInstanceType.get_Item(zhuXianZhangJiePeiZhi.chapterOrder - 1); for (int i = 0; i < chapterInfo.dungeons.get_Count(); i++) { if (instanceID == chapterInfo.dungeons.get_Item(i).dungeonId) { return(chapterInfo.dungeons.get_Item(i).clearance); } } return(false); }
private void OnClickBtnNextChapter(GameObject sender) { Debug.LogError("OnClickBtnNextChapter"); if (this.CheckCanNextChapter()) { int chapterCheck = InstanceSelectUI.currentShowChapter + 1; ZhuXianZhangJiePeiZhi datazj = DataReader <ZhuXianZhangJiePeiZhi> .DataList.Find((ZhuXianZhangJiePeiZhi a) => a.chapterType == (int)InstanceSelectUI.currentDungeonType && a.chapterOrder == chapterCheck); if (this.listData.Find((ChapterInfo a) => a.chapterId == datazj.id) == null) { DungeonManager.Instance.SendGetDungeonDataReq(datazj.id, InstanceSelectUI.currentDungeonType, delegate { this.OnClickBtnNextChapter(null); }); return; } InstanceSelectUI.currentShowChapter++; this.RefreshUI(InstanceSelectUI.currentShowChapter, InstanceSelectUI.currentDungeonType); } }
public bool CheckEliteDungeonBadge() { for (int i = 0; i < DungeonManager.Instance.EliteData.get_Count(); i++) { int chapterId = DungeonManager.Instance.EliteData.get_Item(i).chapterId; ZhuXianZhangJiePeiZhi zhuXianZhangJiePeiZhi = DataReader <ZhuXianZhangJiePeiZhi> .Get(chapterId); for (int j = 0; j < zhuXianZhangJiePeiZhi.needStar.get_Count(); j++) { int key = this.MakeBoxRewardID(zhuXianZhangJiePeiZhi.id, 102, zhuXianZhangJiePeiZhi.needStar.get_Item(j)); if (this.m_mapChapterAwards.ContainsKey(key)) { ChapterAwardInfo chapterAwardInfo = BoxRewardManager.Instance.m_mapChapterAwards[key]; if (chapterAwardInfo.canReceive && !chapterAwardInfo.isReceived) { return(true); } } } } return(false); }
private bool CheckCanNextChapter() { ZhuXianZhangJiePeiZhi zhuXianZhangJiePeiZhi = DataReader <ZhuXianZhangJiePeiZhi> .DataList.Find((ZhuXianZhangJiePeiZhi a) => a.chapterOrder == InstanceSelectUI.currentShowChapter && a.chapterType == (int)InstanceSelectUI.currentDungeonType); using (List <ChapterInfo> .Enumerator enumerator = this.listData.GetEnumerator()) { while (enumerator.MoveNext()) { ChapterInfo current = enumerator.get_Current(); if (zhuXianZhangJiePeiZhi.id == current.chapterId) { using (List <DungeonInfo> .Enumerator enumerator2 = current.dungeons.GetEnumerator()) { while (enumerator2.MoveNext()) { DungeonInfo current2 = enumerator2.get_Current(); if (!current2.clearance) { UIManagerControl.Instance.ShowToastText(GameDataUtils.GetChineseContent(505098, false)); bool result = false; return(result); } } } break; } } } ZhuXianZhangJiePeiZhi zhuXianZhangJiePeiZhi2 = DataReader <ZhuXianZhangJiePeiZhi> .DataList.Find((ZhuXianZhangJiePeiZhi a) => a.chapterOrder == InstanceSelectUI.currentShowChapter + 1 && a.chapterType == (int)InstanceSelectUI.currentDungeonType); if (zhuXianZhangJiePeiZhi2 != null && EntityWorld.Instance.EntSelf.Lv < zhuXianZhangJiePeiZhi2.chapterLv) { string text = GameDataUtils.GetChineseContent(505086, false); text = text.Replace("{s1}", zhuXianZhangJiePeiZhi2.chapterLv.ToString()); UIManagerControl.Instance.ShowToastText(text); return(false); } return(true); }
public static void OpenInstanceSelectUI(int instanceID, bool hideTheVisible = true, UIType type = UIType.FullScreen) { ZhuXianPeiZhi zhuXianPeiZhi = DataReader <ZhuXianPeiZhi> .Get(instanceID); int chapterId = zhuXianPeiZhi.chapterId; ZhuXianZhangJiePeiZhi datazj = DataReader <ZhuXianZhangJiePeiZhi> .Get(chapterId); ChapterResume chapterResume = DungeonManager.Instance.listChapterResume.Find((ChapterResume a) => a.dungeonType == (DungeonType.ENUM)datazj.chapterType); List <ChapterInfo> dataByInstanceType = DungeonManager.Instance.GetDataByInstanceType(datazj.chapterType); if (dataByInstanceType.get_Count() == 0) { DungeonManager.Instance.SendGetDungeonDataReq(chapterResume.chapterId, chapterResume.dungeonType, delegate { InstanceManagerUI.OpenInstanceSelectUI(instanceID, hideTheVisible, type); }); return; } InstanceManagerUI.LastOpenInstanceID = instanceID; InstanceSelectUI instanceSelectUI = UIManagerControl.Instance.OpenUI("InstanceSelectUI", null, true, UIType.FullScreen) as InstanceSelectUI; instanceSelectUI.RefreshUIByInstanceID(InstanceManagerUI.LastOpenInstanceID); }
private void InitChapterDatas() { for (int i = 0; i < DataReader <ZhuXianZhangJiePeiZhi> .DataList.get_Count(); i++) { ZhuXianZhangJiePeiZhi zhuXianZhangJiePeiZhi = DataReader <ZhuXianZhangJiePeiZhi> .DataList.get_Item(i); ChapterInfoCustom chapterInfoCustom = new ChapterInfoCustom(); chapterInfoCustom.chapter = zhuXianZhangJiePeiZhi.chapterOrder; chapterInfoCustom.type = zhuXianZhangJiePeiZhi.chapterType; chapterInfoCustom.needStar.AddRange(zhuXianZhangJiePeiZhi.needStar); chapterInfoCustom.chapterID = zhuXianZhangJiePeiZhi.id; if (zhuXianZhangJiePeiZhi.chapterType == 101) { this.dicChaptersNormal.Add(zhuXianZhangJiePeiZhi.chapterOrder, chapterInfoCustom); if (zhuXianZhangJiePeiZhi.chapterOrder < this.minChapterNormal) { this.minChapterNormal = zhuXianZhangJiePeiZhi.chapterOrder; } else if (zhuXianZhangJiePeiZhi.chapterOrder > this.maxChapterNormal) { this.maxChapterNormal = zhuXianZhangJiePeiZhi.chapterOrder; } } else if (zhuXianZhangJiePeiZhi.chapterType == 102) { this.dicChaptersElite.Add(zhuXianZhangJiePeiZhi.chapterOrder, chapterInfoCustom); if (zhuXianZhangJiePeiZhi.chapterOrder < this.minChapterElite) { this.minChapterElite = zhuXianZhangJiePeiZhi.chapterOrder; } else if (zhuXianZhangJiePeiZhi.chapterOrder > this.maxChapterElite) { this.maxChapterElite = zhuXianZhangJiePeiZhi.chapterOrder; } } } }
private void RefreshInstanceItems(int chapter, DungeonType.ENUM dungeonType) { this.ResetItems(); ChapterInfo chapterInfo = this.listData.get_Item(chapter - 1); List <DungeonInfo> list = new List <DungeonInfo>(); list.AddRange(chapterInfo.dungeons); for (int i = 0; i < list.get_Count(); i++) { int num = i; for (int j = i + 1; j < list.get_Count(); j++) { DungeonInfo dungeonInfo = list.get_Item(num); ZhuXianPeiZhi zhuXianPeiZhi = DataReader <ZhuXianPeiZhi> .Get(dungeonInfo.dungeonId); if (zhuXianPeiZhi == null) { Debug.LogError("GameData.InstanceConfigure no key = " + dungeonInfo.dungeonId); } else { DungeonInfo dungeonInfo2 = list.get_Item(j); ZhuXianPeiZhi zhuXianPeiZhi2 = DataReader <ZhuXianPeiZhi> .Get(dungeonInfo2.dungeonId); if (zhuXianPeiZhi2 == null) { Debug.LogError("GameData.InstanceConfigure no key = " + dungeonInfo2.dungeonId); } else if (zhuXianPeiZhi.instance > zhuXianPeiZhi2.instance) { num = j; } } } if (num != i) { XUtility.ListExchange <DungeonInfo>(list, i, num); } } for (int k = 0; k < list.get_Count(); k++) { DungeonInfo di = list.get_Item(k); if (k == 0) { FuBenJiChuPeiZhi icTmp = DataReader <FuBenJiChuPeiZhi> .Get(di.dungeonId); ZhuXianZhangJiePeiZhi zhuXianZhangJiePeiZhi = DataReader <ZhuXianZhangJiePeiZhi> .DataList.Find((ZhuXianZhangJiePeiZhi a) => a.chapterType == icTmp.type && a.chapterOrder == DataReader <ZhuXianZhangJiePeiZhi> .Get(DataReader <ZhuXianPeiZhi> .Get(di.dungeonId).chapterId).chapterOrder); string chineseContent = GameDataUtils.GetChineseContent(zhuXianZhangJiePeiZhi.chapterName, false); string[] array = chineseContent.Split(new char[] { ' ' }); this.TextChapterTitle.set_text(array[1] + "<size=25>(" + array[0] + ")</size>"); } ZhuXianPeiZhi zhuXianPeiZhi3 = DataReader <ZhuXianPeiZhi> .Get(di.dungeonId); InstancesLayoutItem component; if (zhuXianPeiZhi3.bossInstanceBoss == 1) { GameObject boss = this.GetBoss(); component = boss.GetComponent <InstancesLayoutItem>(); boss.get_transform().SetParent(this.InstancesLayout); boss.GetComponent <RectTransform>().set_localScale(Vector3.get_one()); boss.set_name(di.dungeonId.ToString()); } else { GameObject normal = this.GetNormal(); component = normal.GetComponent <InstancesLayoutItem>(); normal.get_transform().SetParent(this.InstancesLayout); normal.GetComponent <RectTransform>().set_localScale(Vector3.get_one()); normal.set_name(di.dungeonId.ToString()); } component.GetComponent <ButtonCustom>().onClickCustom = new ButtonCustom.VoidDelegateObj(this.OnClcikInstancesLayoutItem); this.listInstanceItem.Add(component); bool isLock = (bool)DungeonManager.Instance.CheckLock(di.dungeonId).get_Item("ISLock"); component.RefreshUI(DataReader <FuBenJiChuPeiZhi> .Get(di.dungeonId), isLock, k, di.star); } }
private void RefreshBoxReward(int chapter, DungeonType.ENUM dungeonType) { if (dungeonType == DungeonType.ENUM.Normal || dungeonType == DungeonType.ENUM.Elite) { this.Reward.get_gameObject().SetActive(true); ZhuXianZhangJiePeiZhi zhuXianZhangJiePeiZhi = DataReader <ZhuXianZhangJiePeiZhi> .DataList.Find((ZhuXianZhangJiePeiZhi a) => a.chapterOrder == chapter && a.chapterType == (int)dungeonType); if (zhuXianZhangJiePeiZhi != null) { for (int i = 0; i < zhuXianZhangJiePeiZhi.needStar.get_Count(); i++) { int needstar = zhuXianZhangJiePeiZhi.needStar.get_Item(i); int key = BoxRewardManager.Instance.MakeBoxRewardID(zhuXianZhangJiePeiZhi.id, (int)dungeonType, needstar); if (BoxRewardManager.Instance.m_mapChapterAwards.ContainsKey(key)) { ChapterAwardInfo chapterAwardInfo = BoxRewardManager.Instance.m_mapChapterAwards[key]; if (chapterAwardInfo.canReceive && !chapterAwardInfo.isReceived) { this.currentChapterAwardInfo = chapterAwardInfo; break; } if (!chapterAwardInfo.canReceive) { this.currentChapterAwardInfo = chapterAwardInfo; break; } } else { Debug.LogError("cai == null"); } } ChapterInfoCustom chapterInfoCustom = null; if (dungeonType == DungeonType.ENUM.Normal) { chapterInfoCustom = this.dicChaptersNormal.get_Item(chapter); } else if (dungeonType == DungeonType.ENUM.Elite) { chapterInfoCustom = this.dicChaptersElite.get_Item(chapter); } ChapterInfo chapterInfo = this.listData.get_Item(chapter - 1); if (chapterInfoCustom.canGetReward) { this.BtnBoxReward.get_transform().FindChild("Image1").get_gameObject().SetActive(true); this.BtnBoxReward.get_transform().FindChild("Image2").get_gameObject().SetActive(false); if (this.fxBoxReward != 0) { FXSpineManager.Instance.DeleteSpine(this.fxBoxReward, true); } this.fxBoxReward = FXSpineManager.Instance.PlaySpine(1601, this.BtnBoxReward.get_transform().FindChild("FX"), "InstanceSelectUI", 2001, null, "UI", 0f, 0f, 1f, 1f, false, FXMaskLayer.MaskState.None); } else if (!chapterInfoCustom.canGetReward && chapterInfo.totalStar == chapterInfoCustom.needStar.get_Item(chapterInfoCustom.needStar.get_Count() - 1)) { this.BtnBoxReward.get_transform().FindChild("Image1").get_gameObject().SetActive(false); this.BtnBoxReward.get_transform().FindChild("Image2").get_gameObject().SetActive(true); if (this.fxBoxReward != 0) { FXSpineManager.Instance.DeleteSpine(this.fxBoxReward, true); } } else { this.BtnBoxReward.get_transform().FindChild("Image1").get_gameObject().SetActive(true); this.BtnBoxReward.get_transform().FindChild("Image2").get_gameObject().SetActive(false); if (this.fxBoxReward != 0) { FXSpineManager.Instance.DeleteSpine(this.fxBoxReward, true); } } this.currentRewardNeedStar = chapterInfoCustom.starCondition; this.TextRewardNow.set_text(string.Concat(new object[] { string.Empty, chapterInfo.totalStar, "/", chapterInfoCustom.starCondition })); } } else { this.Reward.get_gameObject().SetActive(false); } }
private void OnClickBtnBoxReward(GameObject sender) { if (this.lockBtnBoxReward) { return; } if (BackpackManager.Instance.ShowBackpackFull()) { return; } bool flag = true; ChapterInfoCustom chapterInfoCustom = null; if (InstanceSelectUI.currentDungeonType == DungeonType.ENUM.Normal) { chapterInfoCustom = this.dicChaptersNormal.get_Item(InstanceSelectUI.currentShowChapter); } else if (InstanceSelectUI.currentDungeonType == DungeonType.ENUM.Elite) { chapterInfoCustom = this.dicChaptersElite.get_Item(InstanceSelectUI.currentShowChapter); } ChapterInfo chapterInfo = this.listData.get_Item(InstanceSelectUI.currentShowChapter - 1); if (!chapterInfoCustom.canGetReward && chapterInfo.totalStar == chapterInfoCustom.needStar.get_Item(chapterInfoCustom.needStar.get_Count() - 1)) { UIManagerControl.Instance.ShowToastText(GameDataUtils.GetChineseContent(505077, false)); return; } if (!this.currentChapterAwardInfo.canReceive) { flag = false; } XDict <string, int> xDict = BoxRewardManager.Instance.ParseAwardId(this.currentChapterAwardInfo.chapterAwardId); ZhuXianZhangJiePeiZhi zhuXianZhangJiePeiZhi = DataReader <ZhuXianZhangJiePeiZhi> .Get(xDict["chapter"]); List <int> itemIDList = new List <int>(); List <long> itemCountList = new List <long>(); if (zhuXianZhangJiePeiZhi != null) { string text = string.Empty; string text2 = string.Empty; for (int i = 0; i < zhuXianZhangJiePeiZhi.needStar.get_Count(); i++) { if (zhuXianZhangJiePeiZhi.needStar.get_Item(i) == xDict["needstar"]) { text = zhuXianZhangJiePeiZhi.rewardItem.get_Item(i).value; text2 = zhuXianZhangJiePeiZhi.rewardNum.get_Item(i).value; break; } } string[] array = text.Split(new char[] { ',' }); string[] array2 = text2.Split(new char[] { ',' }); for (int j = 0; j < array.Length; j++) { itemIDList.Add(int.Parse(array[j])); itemCountList.Add((long)int.Parse(array2[j])); } } if (flag) { this.lockBtnBoxReward = true; if (this.FxMaskTrans == null) { this.FxMaskTrans = UINodesManager.MiddleUIRoot; } else { this.FxMaskTrans.get_gameObject().SetActive(true); } RewardUI rewardui; this.FxID = FXSpineManager.Instance.ReplaySpine(this.FxID, 801, this.FxMaskTrans, string.Empty, 14000, delegate { FXSpineManager.Instance.PlaySpine(802, this.FxMaskTrans, string.Empty, 14000, null, "UI", 0f, 0f, 1f, 1f, false, FXMaskLayer.MaskState.None); rewardui = LinkNavigationManager.OpenRewardUI(UINodesManager.MiddleUIRoot); rewardui.SetRewardItem("获得奖励", itemIDList, itemCountList, true, true, delegate { BoxRewardManager.Instance.SendReceiveAwardReq(this.currentChapterAwardInfo.chapterAwardId); FXSpineManager.Instance.DeleteSpine(this.FxID, true); if (this.FxMaskTrans != UINodesManager.MiddleUIRoot) { this.FxMaskTrans.get_gameObject().SetActive(false); for (int k = 0; k < this.FxMaskTrans.get_childCount(); k++) { Transform child = this.FxMaskTrans.GetChild(k); Object.Destroy(child.get_gameObject()); } } }, null); this.lockBtnBoxReward = false; }, "UI", 0f, 0f, 1f, 1f, false, FXMaskLayer.MaskState.None); FXSpineManager.Instance.PlaySpine(803, this.FxMaskTrans, string.Empty, 14000, null, "UI", 0f, 0f, 1f, 1f, false, FXMaskLayer.MaskState.None); } else { RewardUI rewardui = LinkNavigationManager.OpenRewardUI(UINodesManager.TopUIRoot); rewardui.SetRewardItem("奖励预览", itemIDList, itemCountList, false, false, delegate { string text3 = GameDataUtils.GetChineseContent(510111, false); text3 = text3.Replace("{s1}", this.currentRewardNeedStar.ToString()); UIManagerControl.Instance.ShowToastText(text3); }, null); } }