public static bool getHeroStarConfig(int nHeroID, int nStarLv, ref SHeroStarSchemeInfo _sData) { IntPtr infoPtr = getHeroStarConfig(nHeroID, nStarLv); if ((int)infoPtr == 0) { Trace.LogWarning(String.Format("getHeroStarConfig 获取HeroID:{0}, StarLv:{1}的星级信息无效", nHeroID, nStarLv)); return(false); } _sData = IntPtrHelper.toData <SHeroStarSchemeInfo>(infoPtr); return(true); }
public void checkAllHeroIsHaveCanUpStar(int nCurGold = 0) { if (EntityFactory.MainHeroView == null) { return; } int dwPDBID = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_ID); ActorHeroInfo heroInfo = null; if (!actorHero.TryGetValue(dwPDBID, out heroInfo)) { return; } int nHaveGold = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_GOLD); nHaveGold = nCurGold > 0 ? nCurGold : nHaveGold; bool bCanUpstar = false; foreach (var item in heroInfo.dicEntityHeroInfo) { if (item.Value.bIsBuy <= 0) { continue; } SHeroStarSchemeInfo pStarScheme = new SHeroStarSchemeInfo(); if (!GameLogicAPI.getHeroStarConfig(item.Value.nHeroID, item.Value.byStarLv, ref pStarScheme)) { continue; } if (item.Value.byStarLv >= pStarScheme.nLimitLV) { continue; } bool bIsLifeHero = LogicDataCenter.lifeHeroDataManager.AllLifeHero.ContainsKey(item.Value.nHeroID); int nNeedCard = bIsLifeHero && pStarScheme.nCardDiscount > 0 ? pStarScheme.nCardDiscount : pStarScheme.nNeedCount; int nNeedGold = bIsLifeHero && pStarScheme.nGoldDiscount > 0 ? pStarScheme.nGoldDiscount : pStarScheme.nExpendGold; if (nNeedCard > item.Value.nCardCount || nNeedGold > nHaveGold) { continue; } bCanUpstar = true; break; } int playerLv = EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_LEVEL); SSchemeSideButtonInfo config = SideButtonConfig.Instance.GetSideButtonConfig((int)ESideButtonItemType.ESBT_HeroStar); if (bCanUpstar && playerLv >= config.nLowLv && playerLv <= config.nHighLv) { // 满足升星条件,显示升星提示 SideButtonListAddData msg = new SideButtonListAddData(); msg.nItemID = (int)ESideButtonItemType.ESBT_HeroStar; msg.nButtonIconID = config.nIconID; msg.strButtonText = config.strName; msg.strTooltip = config.strHint; msg.callBack = (customData) => { UIButtonType ButtonType = new UIButtonType((int)PlayerSubWndType.WND_HERO); ButtonType.bIsRequestSelf = true; ButtonType.nRequestPDBID = dwPDBID; UISystem.Instance.SendWndMessage(WndMsgID.WND_MSG_PLAYERBUTTONFRAME_OPENFRAME, ButtonType); }; LogicDataCenter.sideButtonDataManager.AddItem(msg); } else { // 不满足升星条件, 隐藏升星提示 SideButtonListRemoveData msg = new SideButtonListRemoveData(); msg.nItemID = (int)ESideButtonItemType.ESBT_HeroStar; LogicDataCenter.sideButtonDataManager.RemoveItem(msg); } }
// 显示英雄头像星级及卡牌数量 public void ShowHeroHead(Dictionary <int, cmd_entity_hero_info> dicEntityHeroInfo, Dictionary <int, cmd_entity_nohanve_hero> dicEntityNoHaveHeroInfo, int nCurrentGold = 0) { HeroList.DataSource.Clear(); UIWidgets.ObservableList <UTileViewItemHero> dataSource = new UIWidgets.ObservableList <UTileViewItemHero>(); // 遍历已拥有的英雄加到表中 foreach (KeyValuePair <int, cmd_entity_hero_info> kvp in dicEntityHeroInfo) { cmd_entity_hero_info cmdInfo = kvp.Value; int nHeroID = cmdInfo.nHeroID; SHeroStarSchemeInfo pStarScheme = new SHeroStarSchemeInfo(); if (!GameLogicAPI.getHeroStarConfig(nHeroID, cmdInfo.byStarLv, ref pStarScheme)) { continue; } bool bIsLifeHero = LogicDataCenter.lifeHeroDataManager.AllLifeHero.ContainsKey(nHeroID); int nNeedCard = bIsLifeHero && pStarScheme.nCardDiscount > 0 ? pStarScheme.nCardDiscount : pStarScheme.nNeedCount; int nNeedGold = bIsLifeHero && pStarScheme.nGoldDiscount > 0 ? pStarScheme.nGoldDiscount : pStarScheme.nExpendGold; if (nNeedCard <= 0 || nNeedGold <= 0) { continue; } PersonSkinModelItem modelData = new PersonSkinModelItem(); if (!GameLogicAPI.GetPersonModel((UInt16)nHeroID, ref modelData)) { continue; } UTileViewItemHero item = new UTileViewItemHero(); item.nHeroID = nHeroID; item.headIcon = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_HeadPortrait, WndID.WND_ID_PLAYERFRAME, 1, 9, nHeroID); if (item.headIcon == null) { item.headIcon = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_HeadPortrait, WndID.WND_ID_PLAYERFRAME, 1, 9, 10); } item.stName = cmdInfo.chHeroName; item.stTitle = modelData.szHeroTitle; item.nStarLv = cmdInfo.byStarLv; item.bHaveHero = (cmdInfo.bIsBuy > 0); item.bWeekFree = (cmdInfo.bIsWeekFree > 0); item.nStarLvLimit = pStarScheme.nLimitLV; item.fExpValue = (float)cmdInfo.nCardCount / nNeedCard; item.stStarExp = cmdInfo.nCardCount.ToString() + (cmdInfo.byStarLv >= pStarScheme.nLimitLV ? "" : "/" + nNeedCard.ToString()); int nGold = nCurrentGold == 0 ? EntityFactory.MainHeroView.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_GOLD) : nCurrentGold; // 已购买、未满级、卡够、钱够 item.bUpGrade = (cmdInfo.bIsBuy > 0 && cmdInfo.byStarLv < pStarScheme.nLimitLV && item.fExpValue >= 1 && nGold >= nNeedGold); item.nUnlockLevel = modelData.nUnlockLevel; item.bFpsHero = modelData.nPlayMode > 0; dataSource.Add(item); } // 遍历未拥有的英雄遍历到表中 foreach (KeyValuePair <int, cmd_entity_nohanve_hero> kvp in dicEntityNoHaveHeroInfo) { cmd_entity_nohanve_hero cmdInfo = kvp.Value; int nHeroID = cmdInfo.nHeroID; PersonSkinModelItem modelData = new PersonSkinModelItem(); if (!GameLogicAPI.GetPersonModel((UInt16)nHeroID, ref modelData)) { continue; } SHeroStarSchemeInfo pStarScheme = new SHeroStarSchemeInfo(); if (!GameLogicAPI.getHeroStarConfig(nHeroID, 1, ref pStarScheme)) { continue; } bool bIsLifeHero = LogicDataCenter.lifeHeroDataManager.AllLifeHero.ContainsKey(nHeroID); int nNeedCard = bIsLifeHero && pStarScheme.nCardDiscount > 0 ? pStarScheme.nCardDiscount : pStarScheme.nNeedCount; int nNeedGold = bIsLifeHero && pStarScheme.nGoldDiscount > 0 ? pStarScheme.nGoldDiscount : pStarScheme.nExpendGold; if (nNeedCard <= 0 || nNeedGold <= 0) { continue; } UTileViewItemHero item = new UTileViewItemHero(); item.nHeroID = nHeroID; item.headIcon = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_HeadPortrait, WndID.WND_ID_PLAYERFRAME, 1, 9, nHeroID); if (item.headIcon == null) { item.headIcon = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_HeadPortrait, WndID.WND_ID_PLAYERFRAME, 1, 9, 10); } item.stName = cmdInfo.chHeroName; item.stTitle = modelData.szHeroTitle; item.nStarLv = 1; item.bHaveHero = false; item.bWeekFree = false; item.nStarLvLimit = pStarScheme.nLimitLV; item.fExpValue = (float)cmdInfo.nHaveCardCount / nNeedCard; item.stStarExp = cmdInfo.nHaveCardCount.ToString() + "/" + nNeedCard.ToString(); item.bUpGrade = false; item.nUnlockLevel = modelData.nUnlockLevel; item.bFpsHero = modelData.nPlayMode > 0; dataSource.Add(item); } dataSource.Sort(CompareMemberList); HeroList.DataSource = dataSource; //增加监听点击头像的事件 HeroList.OnSelect.RemoveAllListeners(); HeroList.OnSelect.AddListener(ItemSelected); }