Example #1
0
        private void AddDamageValue(ref PoolObjHandle <ActorRoot> actor, SkillSlotType slotType, int iValue, HurtTypeDef hurtType)
        {
            if (this.m_listDamageActorValue != null && slotType <= SkillSlotType.SLOT_SKILL_VALID && actor)
            {
                uint objID = actor.get_handle().ObjID;
                this.DeleteTimeoutDamageValue(objID, 0uL);
                DAMAGE_ACTOR_INFO dAMAGE_ACTOR_INFO;
                if (!this.m_listDamageActorValue.TryGetValue(objID, ref dAMAGE_ACTOR_INFO))
                {
                    dAMAGE_ACTOR_INFO           = default(DAMAGE_ACTOR_INFO);
                    dAMAGE_ACTOR_INFO.actorType = actor.get_handle().TheActorMeta.ActorType;
                    dAMAGE_ACTOR_INFO.actorName = actor.get_handle().name;
                    dAMAGE_ACTOR_INFO.ConfigId  = actor.get_handle().TheActorMeta.ConfigId;
                    if (dAMAGE_ACTOR_INFO.actorType == ActorTypeDef.Actor_Type_Monster)
                    {
                        MonsterWrapper monsterWrapper = actor.get_handle().AsMonster();
                        dAMAGE_ACTOR_INFO.bMonsterType = monsterWrapper.GetActorSubType();
                        dAMAGE_ACTOR_INFO.actorSubType = monsterWrapper.GetActorSubSoliderType();
                    }
                    Player player = Singleton <GamePlayerCenter> .get_instance().GetPlayer(actor.get_handle().TheActorMeta.PlayerId);

                    if (player != null)
                    {
                        dAMAGE_ACTOR_INFO.playerName = player.Name;
                    }
                    dAMAGE_ACTOR_INFO.listDamage = new SortedList <ulong, DOUBLE_INT_INFO[]>();
                    this.m_listDamageActorValue.Add(objID, dAMAGE_ACTOR_INFO);
                }
                ulong logicFrameTick = Singleton <FrameSynchr> .get_instance().LogicFrameTick;

                DOUBLE_INT_INFO[] array;
                if (!dAMAGE_ACTOR_INFO.listDamage.TryGetValue(logicFrameTick, ref array))
                {
                    array = new DOUBLE_INT_INFO[12];
                    dAMAGE_ACTOR_INFO.listDamage.Add(logicFrameTick, array);
                }
                if (array[(int)slotType].iValue == 0)
                {
                    array[(int)slotType].iKey = (int)hurtType;
                }
                DOUBLE_INT_INFO[] expr_170_cp_0 = array;
                expr_170_cp_0[(int)slotType].iValue = expr_170_cp_0[(int)slotType].iValue + iValue;
                dAMAGE_ACTOR_INFO.listDamage.set_Item(logicFrameTick, array);
                this.m_listDamageActorValue.set_Item(objID, dAMAGE_ACTOR_INFO);
            }
        }
        public int GetAllActorsTotalDamageAndTopActorId(ref uint[] arrObjId, int iTopCount, ref uint uiAllTotalDamage, ref uint[] arrDiffTypeHurtValue)
        {
            int num = 0;

            uiAllTotalDamage = 0u;
            if (this.m_listDamageActorValue != null && this.m_listDamageActorValue.get_Count() > 0)
            {
                int num2 = 0;
                DOUBLE_INT_INFO[] array = new DOUBLE_INT_INFO[this.m_listDamageActorValue.get_Count()];
                Dictionary <uint, DAMAGE_ACTOR_INFO> .Enumerator enumerator = this.m_listDamageActorValue.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    int num3 = 0;
                    KeyValuePair <uint, DAMAGE_ACTOR_INFO> current = enumerator.get_Current();
                    int count = current.get_Value().listDamage.get_Count();
                    if (count > 0)
                    {
                        ulong ulHeroDeadTime = this.m_ulHeroDeadTime;
                        KeyValuePair <uint, DAMAGE_ACTOR_INFO> current2 = enumerator.get_Current();
                        if (ulHeroDeadTime - current2.get_Value().listDamage.get_Keys().get_Item(count - 1) <= (ulong)((long)this.m_iDamageIntervalTimeMax))
                        {
                            KeyValuePair <uint, DAMAGE_ACTOR_INFO> current3 = enumerator.get_Current();
                            IEnumerator <KeyValuePair <ulong, SKILL_SLOT_HURT_INFO[]> > enumerator2 = current3.get_Value().listDamage.GetEnumerator();
                            while (enumerator2.MoveNext())
                            {
                                ulong ulHeroDeadTime2 = this.m_ulHeroDeadTime;
                                KeyValuePair <ulong, SKILL_SLOT_HURT_INFO[]> current4 = enumerator2.get_Current();
                                if (ulHeroDeadTime2 - current4.get_Key() <= (ulong)((long)this.m_iDamageStatisticsTimeMax))
                                {
                                    KeyValuePair <ulong, SKILL_SLOT_HURT_INFO[]> current5 = enumerator2.get_Current();
                                    SKILL_SLOT_HURT_INFO[] value = current5.get_Value();
                                    if (value != null)
                                    {
                                        for (int i = 0; i <= 11; i++)
                                        {
                                            if (value[i].listHurtInfo != null)
                                            {
                                                int count2 = value[i].listHurtInfo.get_Count();
                                                for (int j = 0; j < count2; j++)
                                                {
                                                    num3 += value[i].listHurtInfo.get_Item(j).iValue;
                                                    if (value[i].listHurtInfo.get_Item(j).hurtType >= HurtTypeDef.PhysHurt && value[i].listHurtInfo.get_Item(j).hurtType < HurtTypeDef.Max)
                                                    {
                                                        arrDiffTypeHurtValue[(int)value[i].listHurtInfo.get_Item(j).hurtType] += (uint)value[i].listHurtInfo.get_Item(j).iValue;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                            if (num3 > 0)
                            {
                                uiAllTotalDamage += (uint)num3;
                                if (this.m_actorKiller)
                                {
                                    uint objID = this.m_actorKiller.handle.ObjID;
                                    KeyValuePair <uint, DAMAGE_ACTOR_INFO> current6 = enumerator.get_Current();
                                    if (objID != current6.get_Key())
                                    {
                                        DOUBLE_INT_INFO[] array2 = array;
                                        int num4 = num2;
                                        KeyValuePair <uint, DAMAGE_ACTOR_INFO> current7 = enumerator.get_Current();
                                        array2[num4].iKey  = (int)current7.get_Key();
                                        array[num2].iValue = num3;
                                        num2++;
                                    }
                                }
                            }
                        }
                    }
                }
                Array.Sort <DOUBLE_INT_INFO>(array, (DOUBLE_INT_INFO p1, DOUBLE_INT_INFO p2) => p2.iValue.CompareTo(p1.iValue));
                int num5 = 0;
                while (num5 < iTopCount && num5 < num2)
                {
                    if (!this.m_actorKiller || (long)array[num5].iKey != (long)((ulong)this.m_actorKiller.handle.ObjID))
                    {
                        if (array[num5].iValue <= 0)
                        {
                            break;
                        }
                        arrObjId[num5] = (uint)array[num5].iKey;
                        num++;
                    }
                    num5++;
                }
            }
            return(num);
        }
Example #3
0
        public int GetAllActorsTotalDamageAndTopActorId(ref uint[] arrObjId, int iTopCount, ref uint uiAllTotalDamage, ref uint[] arrDiffTypeHurtValue)
        {
            int num = 0;

            uiAllTotalDamage = 0u;
            if (this.m_listDamageActorValue != null && this.m_listDamageActorValue.get_Count() > 0)
            {
                int num2 = 0;
                DOUBLE_INT_INFO[] array = new DOUBLE_INT_INFO[this.m_listDamageActorValue.get_Count()];
                Dictionary <uint, DAMAGE_ACTOR_INFO> .Enumerator enumerator = this.m_listDamageActorValue.GetEnumerator();
                while (enumerator.MoveNext())
                {
                    int num3 = 0;
                    KeyValuePair <uint, DAMAGE_ACTOR_INFO> current = enumerator.get_Current();
                    int count = current.get_Value().listDamage.get_Count();
                    if (count > 0)
                    {
                        ulong arg_A5_0 = this.m_ulHeroDeadTime;
                        KeyValuePair <uint, DAMAGE_ACTOR_INFO> current2 = enumerator.get_Current();
                        if (arg_A5_0 - current2.get_Value().listDamage.get_Keys().get_Item(count - 1) <= (ulong)((long)this.m_iDamageIntervalTimeMax))
                        {
                            KeyValuePair <uint, DAMAGE_ACTOR_INFO> current3 = enumerator.get_Current();
                            IEnumerator <KeyValuePair <ulong, DOUBLE_INT_INFO[]> > enumerator2 = current3.get_Value().listDamage.GetEnumerator();
                            while (enumerator2.MoveNext())
                            {
                                ulong arg_F2_0 = this.m_ulHeroDeadTime;
                                KeyValuePair <ulong, DOUBLE_INT_INFO[]> current4 = enumerator2.get_Current();
                                if (arg_F2_0 - current4.get_Key() <= (ulong)((long)this.m_iDamageStatisticsTimeMax))
                                {
                                    KeyValuePair <ulong, DOUBLE_INT_INFO[]> current5 = enumerator2.get_Current();
                                    DOUBLE_INT_INFO[] value = current5.get_Value();
                                    if (value != null)
                                    {
                                        for (int i = 0; i <= 11; i++)
                                        {
                                            num3 += value[i].iValue;
                                            if (value[i].iKey >= 0 && value[i].iKey < 4)
                                            {
                                                arrDiffTypeHurtValue[value[i].iKey] += (uint)value[i].iValue;
                                            }
                                        }
                                    }
                                }
                            }
                            if (num3 > 0)
                            {
                                uiAllTotalDamage += (uint)num3;
                                if (this.m_actorKiller)
                                {
                                    uint arg_1D7_0 = this.m_actorKiller.get_handle().ObjID;
                                    KeyValuePair <uint, DAMAGE_ACTOR_INFO> current6 = enumerator.get_Current();
                                    if (arg_1D7_0 != current6.get_Key())
                                    {
                                        DOUBLE_INT_INFO[] arg_1F4_0_cp_0 = array;
                                        int arg_1F4_0_cp_1 = num2;
                                        KeyValuePair <uint, DAMAGE_ACTOR_INFO> current7 = enumerator.get_Current();
                                        arg_1F4_0_cp_0[arg_1F4_0_cp_1].iKey = (int)current7.get_Key();
                                        array[num2].iValue = num3;
                                        num2++;
                                    }
                                }
                            }
                        }
                    }
                }
                Array.Sort <DOUBLE_INT_INFO>(array, (DOUBLE_INT_INFO p1, DOUBLE_INT_INFO p2) => p2.iValue.CompareTo(p1.iValue));
                int num4 = 0;
                while (num4 < iTopCount && num4 < num2)
                {
                    if (!this.m_actorKiller || (long)array[num4].iKey != (long)((ulong)this.m_actorKiller.get_handle().ObjID))
                    {
                        if (array[num4].iValue <= 0)
                        {
                            break;
                        }
                        arrObjId[num4] = (uint)array[num4].iKey;
                        num++;
                    }
                    num4++;
                }
            }
            return(num);
        }