Beispiel #1
0
        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;
        }
Beispiel #2
0
        /// <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);
        }