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); }
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); }