public void StatisticSkillInfo(HurtEventResultInfo prm) { if (prm.hurtInfo.atkSlot >= SkillSlotType.SLOT_SKILL_COUNT) { return; } if (!this.actorHero || this.actorHero.handle.SkillControl == null || this.actorHero.handle.SkillControl.stSkillStat == null || this.actorHero.handle.SkillControl.stSkillStat.SkillStatistictInfo == null) { return; } SKILLSTATISTICTINFO sKILLSTATISTICTINFO = this.actorHero.handle.SkillControl.stSkillStat.SkillStatistictInfo[(int)prm.hurtInfo.atkSlot]; if (prm.hurtInfo.hurtType != HurtTypeDef.Therapic) { sKILLSTATISTICTINFO.iHurtTotal += prm.hurtTotal; if (prm.src && prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero) { sKILLSTATISTICTINFO.iHurtToHeroTotal += prm.hurtTotal; if (!sKILLSTATISTICTINFO.bIsCurUseSkillHitHero) { sKILLSTATISTICTINFO.bIsCurUseSkillHitHero = true; sKILLSTATISTICTINFO.iUseSkillHitHeroTimes++; } sKILLSTATISTICTINFO.iHitHeroCount++; } sKILLSTATISTICTINFO.iHurtMax = Math.Max(sKILLSTATISTICTINFO.iHurtMax, prm.hurtTotal); if (sKILLSTATISTICTINFO.iHurtMin == -1) { sKILLSTATISTICTINFO.iHurtMin = prm.hurtTotal; } else { sKILLSTATISTICTINFO.iHurtMin = Math.Min(sKILLSTATISTICTINFO.iHurtMin, prm.hurtTotal); } if (sKILLSTATISTICTINFO.iTmpHitAllHurtCountIndex++ < sKILLSTATISTICTINFO.iHitCount) { sKILLSTATISTICTINFO.iTmpHitAllHurtTotal += prm.hurtTotal; } if (sKILLSTATISTICTINFO.iTmpHitAllHurtCountIndex == sKILLSTATISTICTINFO.iHitCount) { sKILLSTATISTICTINFO.iHitAllHurtTotalMax = Math.Max(sKILLSTATISTICTINFO.iHitAllHurtTotalMax, sKILLSTATISTICTINFO.iTmpHitAllHurtTotal); if (sKILLSTATISTICTINFO.iHitAllHurtTotalMin == -1) { sKILLSTATISTICTINFO.iHitAllHurtTotalMin = sKILLSTATISTICTINFO.iTmpHitAllHurtTotal; } else { sKILLSTATISTICTINFO.iHitAllHurtTotalMin = Math.Min(sKILLSTATISTICTINFO.iHitAllHurtTotalMin, sKILLSTATISTICTINFO.iTmpHitAllHurtTotal); } } sKILLSTATISTICTINFO.iadValue = Math.Max(sKILLSTATISTICTINFO.iadValue, prm.hurtInfo.adValue); sKILLSTATISTICTINFO.iapValue = Math.Max(sKILLSTATISTICTINFO.iapValue, prm.hurtInfo.apValue); sKILLSTATISTICTINFO.ihemoFadeRate = Math.Max(sKILLSTATISTICTINFO.ihemoFadeRate, prm.hurtInfo.firstHemoFadeRate); sKILLSTATISTICTINFO.ihpValue = Math.Max(sKILLSTATISTICTINFO.ihpValue, prm.hurtInfo.hpValue); sKILLSTATISTICTINFO.ihurtCount = Math.Max(sKILLSTATISTICTINFO.ihurtCount, prm.hurtInfo.hurtCount); sKILLSTATISTICTINFO.ihurtValue = Math.Max(sKILLSTATISTICTINFO.ihurtValue, prm.hurtInfo.hurtValue); sKILLSTATISTICTINFO.iloseHpValue = Math.Max(sKILLSTATISTICTINFO.iloseHpValue, prm.hurtInfo.loseHpValue); } }
public SkillSlot(SkillSlotType type) { this.SkillStatistictInfo = new SKILLSTATISTICTINFO(); this.IsCDReady = true; this.SlotType = type; this.bLimitUse = false; this.skillChangeEvent = new SkillChangeEvent(this); this.skillIndicator = new SkillControlIndicator(this); this.changeSkillCDRate = 0; this.lLastUseTime = 0L; this.CurSkillCD = 0; }
public void StatisticSkillInfo(HurtEventResultInfo prm) { if ((prm.hurtInfo.atkSlot < SkillSlotType.SLOT_SKILL_COUNT) && (((this.actorHero != 0) && (this.actorHero.handle.SkillControl != null)) && ((this.actorHero.handle.SkillControl.stSkillStat != null) && (this.actorHero.handle.SkillControl.stSkillStat.SkillStatistictInfo != null)))) { SKILLSTATISTICTINFO skillstatistictinfo = this.actorHero.handle.SkillControl.stSkillStat.SkillStatistictInfo[(int)prm.hurtInfo.atkSlot]; if (prm.hurtInfo.hurtType != HurtTypeDef.Therapic) { skillstatistictinfo.iHurtTotal += prm.hurtTotal; if ((prm.src != 0) && (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)) { skillstatistictinfo.iHurtToHeroTotal += prm.hurtTotal; } skillstatistictinfo.iHurtMax = Math.Max(skillstatistictinfo.iHurtMax, prm.hurtTotal); if (skillstatistictinfo.iHurtMin == -1) { skillstatistictinfo.iHurtMin = prm.hurtTotal; } else { skillstatistictinfo.iHurtMin = Math.Min(skillstatistictinfo.iHurtMin, prm.hurtTotal); } if (skillstatistictinfo.iTmpHitAllHurtCountIndex++ < skillstatistictinfo.iHitCount) { skillstatistictinfo.iTmpHitAllHurtTotal += prm.hurtTotal; } if (skillstatistictinfo.iTmpHitAllHurtCountIndex == skillstatistictinfo.iHitCount) { skillstatistictinfo.iHitAllHurtTotalMax = Math.Max(skillstatistictinfo.iHitAllHurtTotalMax, skillstatistictinfo.iTmpHitAllHurtTotal); if (skillstatistictinfo.iHitAllHurtTotalMin == -1) { skillstatistictinfo.iHitAllHurtTotalMin = skillstatistictinfo.iTmpHitAllHurtTotal; } else { skillstatistictinfo.iHitAllHurtTotalMin = Math.Min(skillstatistictinfo.iHitAllHurtTotalMin, skillstatistictinfo.iTmpHitAllHurtTotal); } } skillstatistictinfo.iadValue = Math.Max(skillstatistictinfo.iadValue, prm.hurtInfo.adValue); skillstatistictinfo.iapValue = Math.Max(skillstatistictinfo.iapValue, prm.hurtInfo.apValue); skillstatistictinfo.ihemoFadeRate = Math.Max(skillstatistictinfo.ihemoFadeRate, prm.hurtInfo.hemoFadeRate); skillstatistictinfo.ihpValue = Math.Max(skillstatistictinfo.ihpValue, prm.hurtInfo.hpValue); skillstatistictinfo.ihurtCount = Math.Max(skillstatistictinfo.ihurtCount, prm.hurtInfo.hurtCount); skillstatistictinfo.ihurtValue = Math.Max(skillstatistictinfo.ihurtValue, prm.hurtInfo.hurtValue); skillstatistictinfo.iloseHpValue = Math.Max(skillstatistictinfo.iloseHpValue, prm.hurtInfo.loseHpValue); } } }
private void OnActorDamageAtker(ref HurtEventResultInfo prm) { if (prm.atker && prm.atker.handle.TheActorMeta.ActorType != ActorTypeDef.Actor_Type_Hero && prm.hurtInfo.hurtType != HurtTypeDef.Therapic) { DictionaryView <uint, NONHERO_STATISTIC_INFO> dictionaryView; if (!this.m_NonHeroInfo.TryGetValue((uint)prm.atker.handle.TheActorMeta.ActorType, out dictionaryView)) { dictionaryView = new DictionaryView <uint, NONHERO_STATISTIC_INFO>(); this.m_NonHeroInfo.Add((uint)prm.atker.handle.TheActorMeta.ActorType, dictionaryView); } NONHERO_STATISTIC_INFO nONHERO_STATISTIC_INFO; if (!dictionaryView.TryGetValue((uint)prm.atker.handle.TheActorMeta.ActorCamp, out nONHERO_STATISTIC_INFO)) { nONHERO_STATISTIC_INFO = new NONHERO_STATISTIC_INFO(); dictionaryView.Add((uint)prm.atker.handle.TheActorMeta.ActorCamp, nONHERO_STATISTIC_INFO); } nONHERO_STATISTIC_INFO.uiTotalAttackNum += 1u; nONHERO_STATISTIC_INFO.uiTotalHurtCount += (uint)prm.hurtTotal; nONHERO_STATISTIC_INFO.uiHurtMax = ((nONHERO_STATISTIC_INFO.uiHurtMax > (uint)prm.hurtTotal) ? nONHERO_STATISTIC_INFO.uiHurtMax : ((uint)prm.hurtTotal)); nONHERO_STATISTIC_INFO.uiHurtMin = ((nONHERO_STATISTIC_INFO.uiHurtMin < (uint)prm.hurtTotal) ? nONHERO_STATISTIC_INFO.uiHurtMin : ((uint)prm.hurtTotal)); DebugHelper.Assert(prm.atker.handle.SkillControl != null, "empty skill control"); if (prm.atker.handle.SkillControl != null && prm.atker.handle.SkillControl.stSkillStat != null && prm.atker.handle.SkillControl.stSkillStat.SkillStatistictInfo != null) { int atkSlot = (int)prm.hurtInfo.atkSlot; int num = prm.atker.handle.SkillControl.stSkillStat.SkillStatistictInfo.Length; bool flag = atkSlot >= 0 && atkSlot < num; if (flag) { SKILLSTATISTICTINFO sKILLSTATISTICTINFO = prm.atker.handle.SkillControl.stSkillStat.SkillStatistictInfo[(int)prm.hurtInfo.atkSlot]; nONHERO_STATISTIC_INFO.uiAttackDistanceMax = (uint)sKILLSTATISTICTINFO.iAttackDistanceMax; if (prm.atker.handle.SkillControl.CurUseSkillSlot != null && prm.atker.handle.SkillControl.CurUseSkillSlot.SkillObj != null && prm.atker.handle.SkillControl.CurUseSkillSlot.SkillObj.cfgData != null) { uint num2 = prm.atker.handle.SkillControl.CurUseSkillSlot.SkillObj.cfgData.iMaxAttackDistance; nONHERO_STATISTIC_INFO.uiAttackDistanceMin = ((nONHERO_STATISTIC_INFO.uiAttackDistanceMin < num2) ? nONHERO_STATISTIC_INFO.uiAttackDistanceMin : num2); } } } if (nONHERO_STATISTIC_INFO.uiFirstBeAttackTime == 0u) { nONHERO_STATISTIC_INFO.uiFirstBeAttackTime = (uint)Singleton <FrameSynchr> .instance.LogicFrameTick; } this.m_NonHeroInfo[(uint)prm.atker.handle.TheActorMeta.ActorType][(uint)prm.atker.handle.TheActorMeta.ActorCamp] = nONHERO_STATISTIC_INFO; } }
public void OnHitTrigger(ref SkillChooseTargetEventParam prm) { if ((((prm.atker != 0) && (prm.atker.handle.SkillControl != null)) && ((prm.atker.handle.SkillControl.stSkillStat != null) && (prm.atker.handle.SkillControl.stSkillStat.SkillStatistictInfo != null))) && (prm.atker.handle.SkillControl.CurUseSkillSlot != null)) { SKILLSTATISTICTINFO skillstatistictinfo = prm.atker.handle.SkillControl.stSkillStat.SkillStatistictInfo[(int)prm.atker.handle.SkillControl.CurUseSkillSlot.SlotType]; skillstatistictinfo.iHitCount = prm.iTargetCount; skillstatistictinfo.iTmpHitAllHurtCountIndex = 0; skillstatistictinfo.iTmpHitAllHurtTotal = 0; skillstatistictinfo.iHitCountMax = Math.Max(skillstatistictinfo.iHitCountMax, prm.iTargetCount); if (skillstatistictinfo.iHitCountMin == -1) { skillstatistictinfo.iHitCountMin = prm.iTargetCount; } else { skillstatistictinfo.iHitCountMin = Math.Min(skillstatistictinfo.iHitCountMin, prm.iTargetCount); } } }
public void OnHitTrigger(ref SkillChooseTargetEventParam prm) { if (prm.atker && prm.atker == this.actorHero && prm.atker.handle.SkillControl != null && prm.atker.handle.SkillControl.stSkillStat != null && prm.atker.handle.SkillControl.stSkillStat.SkillStatistictInfo != null && prm.atker.handle.SkillControl.CurUseSkillSlot != null) { SKILLSTATISTICTINFO sKILLSTATISTICTINFO = prm.atker.handle.SkillControl.stSkillStat.SkillStatistictInfo[(int)prm.atker.handle.SkillControl.CurUseSkillSlot.SlotType]; sKILLSTATISTICTINFO.iHitCount = prm.iTargetCount; sKILLSTATISTICTINFO.iTmpHitAllHurtCountIndex = 0; sKILLSTATISTICTINFO.iTmpHitAllHurtTotal = 0; sKILLSTATISTICTINFO.iHitCountMax = Math.Max(sKILLSTATISTICTINFO.iHitCountMax, prm.iTargetCount); if (sKILLSTATISTICTINFO.iHitCountMin == -1) { sKILLSTATISTICTINFO.iHitCountMin = prm.iTargetCount; } else { sKILLSTATISTICTINFO.iHitCountMin = Math.Min(sKILLSTATISTICTINFO.iHitCountMin, prm.iTargetCount); } } }
private void OnActorDamageAtker(ref HurtEventResultInfo prm) { if (((prm.atker != 0) && (prm.atker.handle.TheActorMeta.ActorType != ActorTypeDef.Actor_Type_Hero)) && (prm.hurtInfo.hurtType != HurtTypeDef.Therapic)) { DictionaryView <uint, NONHERO_STATISTIC_INFO> view; NONHERO_STATISTIC_INFO nonhero_statistic_info; if (!this.m_NonHeroInfo.TryGetValue((uint)prm.atker.handle.TheActorMeta.ActorType, out view)) { view = new DictionaryView <uint, NONHERO_STATISTIC_INFO>(); this.m_NonHeroInfo.Add((uint)prm.atker.handle.TheActorMeta.ActorType, view); } if (!view.TryGetValue((uint)prm.atker.handle.TheActorMeta.ActorCamp, out nonhero_statistic_info)) { nonhero_statistic_info = new NONHERO_STATISTIC_INFO(); view.Add((uint)prm.atker.handle.TheActorMeta.ActorCamp, nonhero_statistic_info); } nonhero_statistic_info.uiTotalAttackNum++; nonhero_statistic_info.uiTotalHurtCount += (uint)prm.hurtTotal; nonhero_statistic_info.uiHurtMax = (nonhero_statistic_info.uiHurtMax <= prm.hurtTotal) ? ((uint)prm.hurtTotal) : nonhero_statistic_info.uiHurtMax; nonhero_statistic_info.uiHurtMin = (nonhero_statistic_info.uiHurtMin >= prm.hurtTotal) ? ((uint)prm.hurtTotal) : nonhero_statistic_info.uiHurtMin; DebugHelper.Assert(prm.atker.handle.SkillControl != null, "empty skill control"); if (((prm.atker.handle.SkillControl != null) && (prm.atker.handle.SkillControl.stSkillStat != null)) && (prm.atker.handle.SkillControl.stSkillStat.SkillStatistictInfo != null)) { int atkSlot = (int)prm.hurtInfo.atkSlot; int length = prm.atker.handle.SkillControl.stSkillStat.SkillStatistictInfo.Length; if ((atkSlot >= 0) && (atkSlot < length)) { SKILLSTATISTICTINFO skillstatistictinfo = prm.atker.handle.SkillControl.stSkillStat.SkillStatistictInfo[(int)prm.hurtInfo.atkSlot]; nonhero_statistic_info.uiAttackDistanceMax = (uint)skillstatistictinfo.iAttackDistanceMax; if (((prm.atker.handle.SkillControl.CurUseSkillSlot != null) && (prm.atker.handle.SkillControl.CurUseSkillSlot.SkillObj != null)) && (prm.atker.handle.SkillControl.CurUseSkillSlot.SkillObj.cfgData != null)) { uint iMaxAttackDistance = (uint)prm.atker.handle.SkillControl.CurUseSkillSlot.SkillObj.cfgData.iMaxAttackDistance; nonhero_statistic_info.uiAttackDistanceMin = (nonhero_statistic_info.uiAttackDistanceMin >= iMaxAttackDistance) ? iMaxAttackDistance : nonhero_statistic_info.uiAttackDistanceMin; } } } if (nonhero_statistic_info.uiFirstBeAttackTime == 0) { nonhero_statistic_info.uiFirstBeAttackTime = (uint)Singleton <FrameSynchr> .instance.LogicFrameTick; } this.m_NonHeroInfo[(uint)prm.atker.handle.TheActorMeta.ActorType][(uint)prm.atker.handle.TheActorMeta.ActorCamp] = nonhero_statistic_info; } }
private void SkillInfoStatistic(ref SkillSlot stSkillSlot) { if ((stSkillSlot != null) && ((this.stSkillStat.SkillStatistictInfo[(int)stSkillSlot.SlotType].iSkillCfgID == 0) || (this.stSkillStat.SkillStatistictInfo[(int)stSkillSlot.SlotType].iSkillCfgID == stSkillSlot.SkillObj.cfgData.iCfgID))) { this.stSkillStat.SkillStatistictInfo[(int)stSkillSlot.SlotType].iSkillCfgID = stSkillSlot.SkillObj.cfgData.iCfgID; SKILLSTATISTICTINFO skillstatistictinfo1 = this.stSkillStat.SkillStatistictInfo[(int)stSkillSlot.SlotType]; skillstatistictinfo1.uiUsedTimes++; this.stSkillStat.SkillStatistictInfo[(int)stSkillSlot.SlotType].iAttackDistanceMax = Math.Max(this.stSkillStat.SkillStatistictInfo[(int)stSkillSlot.SlotType].iAttackDistanceMax, (int)stSkillSlot.SkillObj.cfgData.iMaxAttackDistance); long num = (long)(Time.realtimeSinceStartup * 1000f); uint num2 = (uint)(num - stSkillSlot.lLastUseTime); if (stSkillSlot.lLastUseTime != 0) { uint num3 = Math.Min(this.stSkillStat.SkillStatistictInfo[(int)stSkillSlot.SlotType].uiCDIntervalMin, num2); this.stSkillStat.SkillStatistictInfo[(int)stSkillSlot.SlotType].uiCDIntervalMin = num3; uint num4 = Math.Max(this.stSkillStat.SkillStatistictInfo[(int)stSkillSlot.SlotType].uiCDIntervalMax, num2); this.stSkillStat.SkillStatistictInfo[(int)stSkillSlot.SlotType].uiCDIntervalMax = num4; } stSkillSlot.lLastUseTime = num; } }
public void OnActorDamage(ref HurtEventResultInfo prm) { if (prm.src == this.actorHero) { if (prm.hurtInfo.hurtType != HurtTypeDef.Therapic) { base.m_uiBeAttackedNum++; base.m_hurtTakenByEnemy += prm.hurtTotal; if ((prm.atker != 0) && (prm.atker.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero)) { base.m_hurtTakenByHero += prm.hurtTotal; } base.m_BeHurtMax = (base.m_BeHurtMax >= prm.hurtTotal) ? base.m_BeHurtMax : prm.hurtTotal; if (base.m_BeHurtMin == -1) { base.m_BeHurtMin = prm.hurtTotal; } else { base.m_BeHurtMin = (base.m_BeHurtMin <= prm.hurtTotal) ? base.m_BeHurtMin : prm.hurtTotal; } } else { if ((prm.atker != 0) && (prm.atker.handle.TheActorMeta.ActorType != ActorTypeDef.Actor_Type_Organ)) { base.m_uiHealNum++; base.m_iBeHeal += prm.hurtTotal; base.m_BeHealMax = (base.m_BeHealMax >= prm.hurtTotal) ? base.m_BeHealMax : prm.hurtTotal; if (base.m_BeHealMin == -1) { base.m_BeHealMin = prm.hurtTotal; } else { base.m_BeHealMin = (base.m_BeHealMin <= prm.hurtTotal) ? base.m_BeHealMin : prm.hurtTotal; } } if ((prm.atker != 0) && (prm.atker == this.actorHero)) { base.m_iSelfHealNum++; base.m_iSelfHealCount += prm.hurtTotal; base.m_iSelfHealMax = (base.m_iSelfHealMax >= prm.hurtTotal) ? base.m_iSelfHealMax : prm.hurtTotal; if (base.m_iSelfHealMin == -1) { base.m_iSelfHealMin = prm.hurtTotal; } else { base.m_iSelfHealMin = (base.m_iSelfHealMin <= prm.hurtTotal) ? base.m_iSelfHealMin : prm.hurtTotal; } } } } if ((prm.atker != 0) && (prm.atker == this.actorHero)) { if (prm.hurtInfo.hurtType != HurtTypeDef.Therapic) { if (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero) { base.m_hurtToHero += prm.hurtTotal; base.m_uiHurtToHeroNum++; if (prm.hurtInfo.hurtType == HurtTypeDef.PhysHurt) { base.m_iPhysHurtToHero += prm.hurtTotal; } else if (prm.hurtInfo.hurtType == HurtTypeDef.MagicHurt) { base.m_iMagicHurtToHero += prm.hurtTotal; } else if (prm.hurtInfo.hurtType == HurtTypeDef.RealHurt) { base.m_iRealHurtToHero += prm.hurtTotal; } } else if (prm.src.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Organ) { base.m_iHurtToOrgan += prm.hurtTotal; } base.m_hurtToEnemy += prm.hurtTotal; base.m_uiHurtToEnemyNum++; if ((prm.atker.handle.SkillControl.CurUseSkill != null) && (prm.atker.handle.SkillControl.CurUseSkill.SlotType == SkillSlotType.SLOT_SKILL_0)) { base.m_Skill0HurtToEnemy += prm.hurtTotal; } } else { base.m_heal += prm.hurtTotal; } this.StatisticSkillInfo(prm); this.StatisticActorInfo(prm); } else if ((prm.atker != 0) && (prm.atker.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Monster)) { MonsterWrapper actorControl = prm.atker.handle.ActorControl as MonsterWrapper; if ((((actorControl != null) && (actorControl.hostActor != 0)) && ((actorControl.hostActor.handle.TheActorMeta.ActorType == ActorTypeDef.Actor_Type_Hero) && (actorControl.spawnSkillSlot < SkillSlotType.SLOT_SKILL_COUNT))) && (((actorControl.hostActor.handle.SkillControl != null) && (actorControl.hostActor.handle.SkillControl.stSkillStat != null)) && (actorControl.hostActor.handle.SkillControl.stSkillStat.SkillStatistictInfo != null))) { SKILLSTATISTICTINFO skillstatistictinfo1 = actorControl.hostActor.handle.SkillControl.stSkillStat.SkillStatistictInfo[(int)actorControl.spawnSkillSlot]; skillstatistictinfo1.iHurtTotal += prm.hurtTotal; } } }
private SkillSlot() { this.SkillStatistictInfo = new SKILLSTATISTICTINFO(); }