public void SetXPSkillInfo(int nSpellID) { if (nSpellID <= 0) { Debug.LogWarning("XPSKill," + nSpellID); return; } IntPtr Ptr = GameLogicAPI.getSpellData(nSpellID); if (Ptr == IntPtr.Zero) { Debug.LogWarning("XPSKill,Ptr == IntPtr.Zero," + nSpellID); return; } SPELL.SPELL_DATA spellData = IntPtrHelper.toData <SPELL.SPELL_DATA>(Ptr); IntPtr strPtr = GameLogicAPI.getSpellStrData(nSpellID, (int)SPELL_DATA_ID.SPDATA_DESC); String szDesc = IntPtrHelper.Ptr2Str(strPtr); Debug.Log("XPSKill," + spellData.nID + "," + szDesc + "," + nSpellID); UBB.toHtml(ref szDesc, UBB_FORMAT_TYPE.UGUI); slotTooltipTrigger.SetText(UTooltipParamName.BodyText, szDesc); slotTooltipTrigger.enabled = true; skillImage.sprite = USpriteManager.Instance.GetSprite(USpriteManager.ESpriteType.EST_Skill, WndID.WND_ID_WAR_XPSKILL, 1, spellData.nIcon); skillImage.gameObject.SetActive(true); xpSkillName = spellData.szName; }
/// <summary> /// 汇总并排序伤害总量,返回按伤害总量排血的角色ID表 /// </summary> /// <returns></returns> private List <int> SummaryAndSortData() { m_DeathReplayDataList.Clear(); List <int> enemyOrderList = new List <int>(); m_endTime = GameLogicAPI.GetUnityTickCount(); bool tempFlag = true; //先汇总8次承受伤害数据 foreach (HurtDataItem hurtData in m_ActorHurtDataList) { if (m_endTime - hurtData.hurtTime > DamageCalculationsTime) { continue; } if (tempFlag) { //保存符合条件的第一次受伤时间 m_startTime = hurtData.hurtTime; tempFlag = false; } DeathReplayData damageData = new DeathReplayData(); EntityView ev = EntityFactory.getEntityViewByID(hurtData.uidOperator); if (ev == null || ev.Property == null) { continue; } int skinID = ev.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_SKIN); if (m_DeathReplayDataList.ContainsKey(skinID)) { damageData = m_DeathReplayDataList[skinID]; if (damageData.skillDamageList.ContainsKey(hurtData.skillID)) { damageData.skillDamageList[hurtData.skillID] += hurtData.hurtNum; } else { damageData.skillDamageList.Add(hurtData.skillID, hurtData.hurtNum); } m_DeathReplayDataList[skinID] = damageData; } else { damageData.uidOperator = hurtData.uidOperator; damageData.pdbID = LogicDataCenter.recordTableDataManager.getWarPersonPDBIDByUID(damageData.uidOperator); damageData.skinID = skinID; EntityView view = EntityFactory.getEntityViewByID(Convert.ToInt32(hurtData.uidOperator)); if (view != null && view.Property != null) { damageData.entityType = view.Type; if (view.Type == ENTITY_TYPE.TYPE_MONSTER) { ///////////////////////////////////////////// damageData.monsterID = view.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_ID); } damageData.roleName = view.Property.CreatureName; damageData.skinName = view.Property.CreatureName; if (view.Type == ENTITY_TYPE.TYPE_PLAYER_ROLE) { int heroId = view.Property.GetNumProp(ENTITY_PROPERTY.PROPERTY_VOCATION); SSchemeHeroTypeConfig config = HeroTypeConfig.Instance.GetHeroTypeConfig(heroId); if (config != null) { damageData.heroDesc = config.strAgainstWay; } } } WarRecordTableDataManager.WarPlayerVsInfo vsInfo = LogicDataCenter.recordTableDataManager.GetWarPlayerVsInfo(damageData.pdbID); if (null != vsInfo) { damageData.skinName = vsInfo.szVocationName; } damageData.skillDamageList.Add(hurtData.skillID, hurtData.hurtNum); damageData.goodsInfo = LogicDataCenter.warMobaGoodsDataManager.GetPlayerGoodsInfo(damageData.pdbID); damageData.personInfo = LogicDataCenter.recordTableDataManager.getWarPersonInfoByPDBID(damageData.pdbID); m_DeathReplayDataList.Add(skinID, damageData); } } //再排汇总后的敌方角色的技能伤害表 foreach (DeathReplayData data in m_DeathReplayDataList.Values) { foreach (KeyValuePair <int, int> kvp in data.skillDamageList) { SkillDamageItem item = new SkillDamageItem(); item.skillID = kvp.Key; item.damageNum = kvp.Value; IntPtr Ptr = GameLogicAPI.getSpellData(kvp.Key); if (Ptr != IntPtr.Zero) { SPELL.SPELL_DATA spellData = IntPtrHelper.toData <SPELL.SPELL_DATA>(Ptr); item.spellEffectType = spellData.nSpellEffectType; item.skillIcon = spellData.nIcon; IntPtr strPtr = GameLogicAPI.getSpellStrData(kvp.Key, (int)SPELL_DATA_ID.SPDATA_NAME); if (strPtr != null) { item.szSkillName = IntPtrHelper.Ptr2Str(strPtr); } strPtr = GameLogicAPI.getSpellStrData(kvp.Key, (int)SPELL_DATA_ID.SPDATA_DESC); if (strPtr != null) { item.szSkillDesc = IntPtrHelper.Ptr2Str(strPtr); } } //如果是普通攻击 if ((item.spellEffectType & (int)SPELL.SPELL_EFFECT_TYPE.SpellEffectType_NormalAttack) != 0) { //判断表里是否已经有普通攻击了,如果有就直接加值 SkillDamageItem temp = data.skillInfoList.Find(x => (x.spellEffectType & (int)SPELL.SPELL_EFFECT_TYPE.SpellEffectType_NormalAttack) != 0); if (null != temp) { temp.damageNum += item.damageNum; } else { data.skillInfoList.Add(item); } } else { data.skillInfoList.Add(item); } } data.skillInfoList.Sort((x, y) => - x.damageNum.CompareTo(y.damageNum)); } //再排序 var dicSort = from objDic in m_DeathReplayDataList orderby objDic.Value.totalDamage descending select objDic; foreach (KeyValuePair <int, DeathReplayData> kvp in dicSort) { enemyOrderList.Add(kvp.Key); } //返回角色ID表 return(enemyOrderList); }