本文整理汇总了C#中Aura.Channel.World.Entities.Creature.CalculateSplashDamage方法的典型用法代码示例。如果您正苦于以下问题:C# Creature.CalculateSplashDamage方法的具体用法?C# Creature.CalculateSplashDamage怎么用?C# Creature.CalculateSplashDamage使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Aura.Channel.World.Entities.Creature
的用法示例。
在下文中一共展示了Creature.CalculateSplashDamage方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Use
//.........这里部分代码省略.........
var aAction = new AttackerAction(CombatActionType.HardHit, attacker, skill.Info.Id, targetEntityId);
aAction.Set(AttackerOptions.Result | AttackerOptions.KnockBackHit2);
TargetAction tAction;
if (attacker.InterceptingSkillId == SkillId.Smash)
{
aAction.Options |= AttackerOptions.Result;
tAction = new TargetAction(CombatActionType.CounteredHit, target, attacker, SkillId.Smash);
}
else
{
tAction = new TargetAction(CombatActionType.TakeHit, target, attacker, skill.Info.Id);
}
tAction.Set(TargetOptions.Result | TargetOptions.Smash);
attacker.InterceptingSkillId = SkillId.None;
var cap = new CombatActionPack(attacker, skill.Info.Id, tAction, aAction);
// Calculate damage
var damage = this.GetDamage(attacker, skill);
var critChance = this.GetCritChance(attacker, target, skill);
// Critical Hit
CriticalHit.Handle(attacker, critChance, ref damage, tAction);
var maxDamage = damage; //Damage without Defense and Protection
// Subtract target def/prot
SkillHelper.HandleDefenseProtection(target, ref damage);
// Mana Shield
ManaShield.Handle(target, ref damage, tAction, maxDamage);
// Apply damage
target.TakeDamage(tAction.Damage = damage, attacker);
// Aggro
target.Aggro(attacker);
if (target.IsDead)
tAction.Set(TargetOptions.FinishingHit | TargetOptions.Finished);
// Set Stun/Knockback
attacker.Stun = aAction.Stun = StunTime;
target.Stun = tAction.Stun = StunTime;
target.Stability = Creature.MinStability;
// Set knockbacked position
attacker.Shove(target, KnockbackDistance);
// Response
Send.SkillUseStun(attacker, skill.Info.Id, AfterUseStun, 1);
// Update both weapons
SkillHelper.UpdateWeapon(attacker, target, attacker.RightHand, attacker.LeftHand);
var critSkill = attacker.Skills.Get(SkillId.CriticalHit);
if (skill.Info.Rank >= SkillRank.R5 && weapon != null && weapon.Data.SplashRadius != 0 && weapon.Data.SplashAngle != 0)
{
foreach (var splashTarget in targets)
{
if (splashTarget != target)
{
if (splashTarget.IsNotReadyToBeHit)
continue;
TargetAction tSplashAction = new TargetAction(CombatActionType.TakeHit, splashTarget, attacker, skill.Info.Id);
tSplashAction.Set(TargetOptions.Result | TargetOptions.Smash);
// Base damage
float damageSplash = this.GetDamage(attacker, skill);
attacker.CalculateSplashDamage(splashTarget, ref damageSplash, skill, critSkill, aAction, tAction, tSplashAction);
// Deal with it!
if (damageSplash > 0)
splashTarget.TakeDamage(tSplashAction.Damage = damageSplash, attacker);
// Alert
splashTarget.Aggro(attacker, true);
if (splashTarget.IsDead)
tSplashAction.Set(TargetOptions.FinishingHit | TargetOptions.Finished);
splashTarget.Stun = tSplashAction.Stun = StunTime;
splashTarget.Stability = Creature.MinStability;
// Set knockbacked position
attacker.Shove(splashTarget, KnockbackDistance);
cap.Add(tSplashAction);
}
}
}
// Action!
cap.Handle();
return CombatSkillResult.Okay;
}
示例2: Use
//.........这里部分代码省略.........
{
attacker.AttackDelayTime = DateTime.Now.AddMilliseconds(GetAttackerStun(attacker, weapon, true));
}
}
// Second hit doubles stun time for normal hits
if (cap.Hit == 2 && !tAction.IsKnockBack)
aAction.Stun *= 2;
// Update current weapon
SkillHelper.UpdateWeapon(attacker, target, weapon);
var critSkill = attacker.Skills.Get(SkillId.CriticalHit);
if (weapon != null && weapon.Data.SplashRadius != 0 && weapon.Data.SplashAngle != 0)
{
foreach (var splashTarget in targets)
{
if (splashTarget != target)
{
if (splashTarget.IsNotReadyToBeHit)
continue;
TargetAction tSplashAction = new TargetAction(CombatActionType.TakeHit, splashTarget, attacker, skill.Info.Id);
// Base damage
float damageSplash;
if (lowStamina)
{
damageSplash = attacker.GetRndBareHandDamage();
}
else
{
damageSplash = (i == 1 ? attacker.GetRndRightHandDamage() : attacker.GetRndLeftHandDamage());
}
attacker.CalculateSplashDamage(splashTarget, ref damageSplash, skill, critSkill, aAction, tAction, tSplashAction, weapon);
// Deal with it!
if (damageSplash > 0)
splashTarget.TakeDamage(tSplashAction.Damage = damageSplash, attacker);
// Alert
splashTarget.Aggro(attacker, true);
// Evaluate caused damage
if (!splashTarget.IsDead)
{
if (tSplashAction.Type != CombatActionType.Defended)
{
if (!splashTarget.Skills.IsReady(SkillId.FinalHit))
{
splashTarget.Stability -= (this.GetStabilityReduction(attacker, weapon) / maxHits) / 2; //Less stability reduction for splash damage.
// React normal for CombatMastery, knock down if
// FH and not dual wield, don't knock at all if dual.
if (skill.Info.Id != SkillId.FinalHit)
{
// Originally we thought you knock enemies back, unless it's a critical
// hit, but apparently you knock *down* under normal circumstances.
// More research to be done.
if (splashTarget.IsUnstable && splashTarget.Is(RaceStands.KnockBackable))
//tSplashAction.Set(tSplashAction.Has(TargetOptions.Critical) ? TargetOptions.KnockDown : TargetOptions.KnockBack);
tSplashAction.Set(TargetOptions.KnockDown);
if (splashTarget.Life < 0)
tSplashAction.Set(TargetOptions.KnockDown);
}
else if (!dualWield && !weaponIsKnuckle)