本文整理汇总了C#中Base.Accumulate方法的典型用法代码示例。如果您正苦于以下问题:C# Base.Accumulate方法的具体用法?C# Base.Accumulate怎么用?C# Base.Accumulate使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Base
的用法示例。
在下文中一共展示了Base.Accumulate方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ApplySpecialEffect
private float ApplySpecialEffect(SpecialEffect effect, DPSWarrCharacter charStruct, Dictionary<Trigger, float> triggerIntervals, Dictionary<Trigger, float> triggerChances, ref Base.StatsWarrior applyTo)
{
#if DEBUG
//ConstructionCounts["ApplySpecialEffect"]++;
#endif
float fightDuration = charStruct.BossOpts.BerserkTimer;
float fightDuration2Pass = charStruct.CalcOpts.SE_UseDur ? fightDuration : 0;
Stats effectStats = effect.Stats;
float upTime = 0f;
//float avgStack = 1f;
/*if (effect.Stats.TargetArmorReduction > 0f || effect.Stats.ArmorPenetrationRating > 0f) {
//int j = 0;
}*/
if (effect.Trigger == Trigger.Use) {
if (effect.Stats._rawSpecialEffectDataSize == 1) {
upTime = effect.GetAverageUptime(0f, 1f, charStruct.CombatFactors.CMHItemSpeed, fightDuration2Pass);
//float uptime = (effect.Cooldown / fightDuration);
List<SpecialEffect> nestedEffect = new List<SpecialEffect>();
nestedEffect.Add(effect.Stats._rawSpecialEffectData[0]);
Base.StatsWarrior _stats2 = new Base.StatsWarrior();
ApplySpecialEffect(effect.Stats._rawSpecialEffectData[0], charStruct, triggerIntervals, triggerChances, ref _stats2);
effectStats = _stats2;
} else {
upTime = effect.GetAverageStackSize(0f, 1f, charStruct.CombatFactors.CMHItemSpeed, fightDuration2Pass);
}
} else if (effect.Duration == 0f && triggerIntervals.ContainsKey(effect.Trigger) && !float.IsInfinity(triggerIntervals[effect.Trigger])) {
upTime = effect.GetAverageProcsPerSecond(triggerIntervals[effect.Trigger],
triggerChances[effect.Trigger],
charStruct.CombatFactors.CMHItemSpeed,
fightDuration2Pass);
} else if (effect.Trigger == Trigger.ExecuteHit) {
upTime = effect.GetAverageStackSize(triggerIntervals[effect.Trigger],
triggerChances[effect.Trigger],
charStruct.CombatFactors.CMHItemSpeed,
fightDuration2Pass * (float)charStruct.BossOpts.Under20Perc);
} else if (triggerIntervals.ContainsKey(effect.Trigger) && !float.IsInfinity(triggerIntervals[effect.Trigger])) {
upTime = effect.GetAverageStackSize(triggerIntervals[effect.Trigger],
triggerChances[effect.Trigger],
charStruct.CombatFactors.CMHItemSpeed,
fightDuration2Pass);
}
if (upTime > 0f) {
if (effect.Duration == 0f) {
applyTo.Accumulate(effectStats, upTime * fightDuration);
} else if (upTime <= effect.MaxStack) {
applyTo.Accumulate(effectStats, upTime);
}
return upTime;
}
return 0f;
}
示例2: DoSpecialEffects
private void DoSpecialEffects(DPSWarrCharacter charStruct, List<SpecialEffect> bersMainHand, List<SpecialEffect> bersOffHand, Base.StatsWarrior statsTotal)
{
#if DEBUG
//ConstructionCounts["DoSpecialEffects"]++;
#endif
#region Initialize Triggers
Dictionary<Trigger, float> triggerIntervals = new Dictionary<Trigger, float>();
Dictionary<Trigger, float> triggerChances = new Dictionary<Trigger, float>();
CalculateTriggers(charStruct, triggerIntervals, triggerChances);
#endregion
#region ArPen Lists
/*List<float> tempArPenRatings = new List<float>();
List<float> tempArPenRatingsCapLimited = new List<float>();
List<float> tempArPenRatingUptimes = new List<float>();
List<SpecialEffect> tempArPenEffects = new List<SpecialEffect>();
List<float> tempArPenEffectIntervals = new List<float>();
List<float> tempArPenEffectChances = new List<float>();
List<float> tempArPenEffectScales = new List<float>();*/
#endregion
// First Let's add InnerRage in, because that affects other calcs
if (charStruct.CalcOpts.M_InnerRage) {
AbilityWrapper ir = charStruct.Rot.GetWrapper<Skills.InnerRage>();
statsTotal.Accumulate(((ir.Ability as Skills.InnerRage).Effect.Stats as Base.StatsWarrior), (ir.Ability as Skills.InnerRage).Effect.GetAverageUptime(0f, 1.00f));
}
List<SpecialEffect> critEffects = new List<SpecialEffect>();
List<SpecialEffect> firstPass = new List<SpecialEffect>();
List<SpecialEffect> secondPass = new List<SpecialEffect>();
List<SpecialEffect> thirdPass = new List<SpecialEffect>();
//bool doubleExecutioner = false;
foreach (SpecialEffect effect in statsTotal.SpecialEffects())
{
effect.Stats.GenerateSparseData();
if (!triggerIntervals.ContainsKey(effect.Trigger)) continue;
else if (effect.Stats.CritRating > 0f)
{
critEffects.Add(effect);
}
#region ArP Proc (which don't exist anymore)
/*else if (effect.Stats.ArmorPenetrationRating > 0f)
{
if (doubleExecutioner) continue;
Trigger realTrigger;
if (bersMainHand.Contains(effect))
{
bersMainHand.Remove(effect);
doubleExecutioner = true;
if (bersOffHand.Contains(effect))
{
bersOffHand.Remove(effect);
realTrigger = Trigger.MeleeHit;
}
else realTrigger = Trigger.MainHandHit;
}
else if (bersOffHand.Contains(effect))
{
bersOffHand.Remove(effect);
realTrigger = Trigger.OffHandHit;
}
else realTrigger = effect.Trigger;
tempArPenEffects.Add(effect);
tempArPenEffectIntervals.Add(triggerIntervals[realTrigger]);
tempArPenEffectChances.Add(triggerChances[realTrigger]);
tempArPenEffectScales.Add(1f);
}*/
#endregion
else if (!bersMainHand.Contains(effect) && !bersOffHand.Contains(effect) &&
(effect.Stats.Agility > 0f ||
effect.Stats.HasteRating > 0f ||
effect.Stats.HitRating > 0f ||
effect.Stats.CritRating > 0f ||
effect.Stats.MasteryRating > 0f ||
effect.Stats.PhysicalHaste > 0f ||
effect.Stats.PhysicalCrit > 0f ||
effect.Stats.PhysicalHit > 0f))
{
// These procs affect rotation
firstPass.Add(effect);
}
else if (!bersMainHand.Contains(effect) && !bersOffHand.Contains(effect) &&
(effect.Stats.FireDamage > 0 ||
effect.Stats.FireDamage > 0f ||
effect.Stats.NatureDamage > 0f ||
effect.Stats.ShadowDamage > 0f ||
effect.Stats.HolyDamage > 0f ||
effect.Stats.ArcaneDamage > 0f))
{
// It's a Special Damage Proc
thirdPass.Add(effect);
}
else if (!bersMainHand.Contains(effect) && !bersOffHand.Contains(effect))
{
// Any other stat proc
secondPass.Add(effect);
}
//.........这里部分代码省略.........