本文整理汇总了C#中Server.MirDatabase.UserMagic.GetDamage方法的典型用法代码示例。如果您正苦于以下问题:C# UserMagic.GetDamage方法的具体用法?C# UserMagic.GetDamage怎么用?C# UserMagic.GetDamage使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Server.MirDatabase.UserMagic
的用法示例。
在下文中一共展示了UserMagic.GetDamage方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: Repulsion
private void Repulsion(UserMagic magic)
{
bool result = false;
for (int d = 0; d <= 1; d++)
{
for (int y = CurrentLocation.Y - d; y <= CurrentLocation.Y + d; y++)
{
if (y < 0) continue;
if (y >= CurrentMap.Height) break;
for (int x = CurrentLocation.X - d; x <= CurrentLocation.X + d; x += Math.Abs(y - CurrentLocation.Y) == d ? 1 : d * 2)
{
if (x < 0) continue;
if (x >= CurrentMap.Width) break;
Cell cell = CurrentMap.GetCell(x, y);
if (!cell.Valid || cell.Objects == null) continue;
for (int i = 0; cell.Objects != null && i < cell.Objects.Count; i++)
{
MapObject ob = cell.Objects[i];
if (ob.Race != ObjectType.Monster && ob.Race != ObjectType.Player) continue;
if (!ob.IsAttackTarget(this) || ob.Level >= Level) continue;
if (Envir.Random.Next(20) >= 6 + magic.Level * 3 + Level - ob.Level) continue;
int distance = 1 + Math.Max(0, magic.Level - 1) + Envir.Random.Next(2);
MirDirection dir = Functions.DirectionFromPoint(CurrentLocation, ob.CurrentLocation);
if (ob.Pushed(this, dir, distance) == 0) continue;
if (ob.Race == ObjectType.Player)
ob.Attacked(this, magic.GetDamage(0), DefenceType.None, false);
result = true;
}
}
}
}
if (result) LevelMagic(magic);
}
示例2: ExplosiveTrap
private void ExplosiveTrap(UserMagic magic, Point location)
{
int trapCount = 0;
for (int i = 0; i <= 3; i++)
if (ArcherTrapObjectsArray[i, 0] != null) trapCount++;
if (trapCount >= magic.Level + 1) return;//max 4 traps
int freeTrapSpot = -1;
for (int i = 0; i <= 3; i++)
if (ArcherTrapObjectsArray[i, 0] == null)
{
freeTrapSpot = i;
break;
}
if (freeTrapSpot == -1) return;
int damage = magic.GetDamage(GetAttackPower(MinMC, MaxMC));
DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, location, freeTrapSpot);
CurrentMap.ActionList.Add(action);
}
示例3: NapalmShot
public void NapalmShot(MapObject target, UserMagic magic)
{
if (target == null || !target.IsAttackTarget(this)) return;
if ((Info.MentalState != 1) && !CanFly(target.CurrentLocation)) return;
int distance = Functions.MaxDistance(CurrentLocation, target.CurrentLocation);
int damage = magic.GetDamage(GetAttackPower(MinMC, MaxMC));
damage = ApplyArcherState(damage);
int delay = distance * 50 + 500; //50 MS per Step
DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + delay, this, magic, damage, target.CurrentLocation);
CurrentMap.ActionList.Add(action);
}
示例4: CrescentSlash
private void CrescentSlash(UserMagic magic)
{
int damageBase = GetAttackPower(MinDC, MaxDC);
if (Envir.Random.Next(0, 100) <= Accuracy)
damageBase += damageBase;//crit should do something like double dmg, not double max dc dmg!
int damageFinal = magic.GetDamage(damageBase);
MirDirection backDir = Functions.ReverseDirection(Direction);
MirDirection preBackDir = Functions.PreviousDir(backDir);
MirDirection nextBackDir = Functions.NextDir(backDir);
for (int i = 0; i < 8; i++)
{
MirDirection dir = (MirDirection)i;
Point hitPoint = Functions.PointMove(CurrentLocation, dir, 1);
if (dir != backDir && dir != preBackDir && dir != nextBackDir)
{
if (!CurrentMap.ValidPoint(hitPoint)) continue;
Cell cell = CurrentMap.GetCell(hitPoint);
if (cell.Objects == null) continue;
for (int j = 0; j < cell.Objects.Count; j++)
{
MapObject target = cell.Objects[j];
switch (target.Race)
{
case ObjectType.Monster:
case ObjectType.Player:
//Only targets
if (target.IsAttackTarget(this))
{
DelayedAction action = new DelayedAction(DelayedType.Damage, Envir.Time + AttackSpeed, target, damageFinal, DefenceType.AC, true);
ActionList.Add(action);
}
break;
}
}
LevelMagic(magic);
}
}
}
示例5: DoubleShot
private bool DoubleShot(MapObject target, UserMagic magic)
{
if (target == null || !target.IsAttackTarget(this)) return false;
if ((Info.MentalState != 1) && !CanFly(target.CurrentLocation)) return false;
int distance = Functions.MaxDistance(CurrentLocation, target.CurrentLocation);
int damage = magic.GetDamage(GetAttackPower(MinMC, MaxMC));
damage = (int)(damage * Math.Max(1, (distance * 0.25)));//range boost
damage = ApplyArcherState(damage);
int delay = distance * 50 + 500; //50 MS per Step
DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + delay, magic, damage, target);
ActionList.Add(action);
action = new DelayedAction(DelayedType.Magic, Envir.Time + delay + 50, magic, damage, target);
ActionList.Add(action);
return true;
}
示例6: SlashingBurst
private void SlashingBurst(UserMagic magic, out bool cast)
{
cast = true;
// damage
int damageBase = GetAttackPower(MinDC, MaxDC);
int damageFinal = magic.GetDamage(damageBase);
// objects = this, magic, damage, currentlocation, direction, attackRange
DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damageFinal, CurrentLocation, Direction, 1);
CurrentMap.ActionList.Add(action);
// telpo location
Point location = Functions.PointMove(CurrentLocation, Direction, 2);
if (!CurrentMap.ValidPoint(location)) return;
Cell cInfo = CurrentMap.GetCell(location);
bool blocked = false;
if (cInfo.Objects != null)
{
for (int c = 0; c < cInfo.Objects.Count; c++)
{
MapObject ob = cInfo.Objects[c];
if (!ob.Blocking) continue;
blocked = true;
if ((cInfo.Objects == null) || blocked) break;
}
}
// blocked telpo cancel
if (blocked) return;
Teleport(CurrentMap, location, false);
//// move character
//CurrentMap.GetCell(CurrentLocation).Remove(this);
//RemoveObjects(Direction, 1);
//CurrentLocation = location;
//CurrentMap.GetCell(CurrentLocation).Add(this);
//AddObjects(Direction, 1);
//Enqueue(new S.UserAttackMove { Direction = Direction, Location = location });
}
示例7: HeavenlySword
private void HeavenlySword(UserMagic magic)
{
int damage = magic.GetDamage(GetAttackPower(MinDC, MaxDC));
DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, CurrentLocation, Direction);
CurrentMap.ActionList.Add(action);
}
示例8: MeteorStrike
private void MeteorStrike(UserMagic magic, Point location, out bool cast)
{
cast = false;
int damage = magic.GetDamage(GetAttackPower(MinMC, MaxMC));
DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, location);
ActiveBlizzard = true;
CurrentMap.ActionList.Add(action);
cast = true;
}
示例9: IceThrust
private void IceThrust(UserMagic magic)
{
int damageBase = GetAttackPower(MinMC, MaxMC);
if (Envir.Random.Next(100) <= (1 + Luck))
damageBase += damageBase;
int damageFinish = magic.GetDamage(damageBase);
Point location = Functions.PointMove(CurrentLocation, Direction, 1);
DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 1500, this, magic, location, Direction, damageFinish, (int)(damageFinish * 0.6));
CurrentMap.ActionList.Add(action);
}
示例10: FlameDisruptor
private void FlameDisruptor(MapObject target, UserMagic magic)
{
if (target == null || !target.IsAttackTarget(this)) return;
int damage = magic.GetDamage(GetAttackPower(MinMC, MaxMC));
if (!target.Undead) damage = (int)(damage * 1.5F);
DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, magic, damage, target);
ActionList.Add(action);
}
示例11: ThunderStorm
private void ThunderStorm(UserMagic magic)
{
int damage = magic.GetDamage(GetAttackPower(MinMC, MaxMC));
DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, CurrentLocation);
CurrentMap.ActionList.Add(action);
}
示例12: FireWall
private void FireWall(UserMagic magic, Point location)
{
int damage = magic.GetDamage(GetAttackPower(MinMC, MaxMC));
DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, location);
CurrentMap.ActionList.Add(action);
}
示例13: Vampirism
private void Vampirism(MapObject target, UserMagic magic)
{
if (target == null || !target.IsAttackTarget(this)) return;
int damage = magic.GetDamage(GetAttackPower(MinMC, MaxMC));
DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, magic, damage, target);
ActionList.Add(action);
}
示例14: HellFire
private void HellFire(UserMagic magic)
{
int damage = magic.GetDamage(GetAttackPower(MinMC, MaxMC));
DelayedAction action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, CurrentLocation, Direction, 4);
CurrentMap.ActionList.Add(action);
if (magic.Level != 3) return;
MirDirection dir = (MirDirection)(((int)Direction + 1) % 8);
action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, CurrentLocation, dir, 4);
CurrentMap.ActionList.Add(action);
dir = (MirDirection)(((int)Direction - 1 + 8) % 8);
action = new DelayedAction(DelayedType.Magic, Envir.Time + 500, this, magic, damage, CurrentLocation, dir, 4);
CurrentMap.ActionList.Add(action);
}
示例15: BladeAvalanche
private void BladeAvalanche(UserMagic magic)
{
int damageBase = GetAttackPower(MinDC, MaxDC);
if (Envir.Random.Next(0,100) <= (1+Luck))
damageBase += damageBase;//crit should do something like double dmg, not double max dc dmg!
int damageFinal = magic.GetDamage(damageBase);
int col = 3;
int row = 3;
Point[] loc = new Point[col]; //0 = left 1 = center 2 = right
loc[0] = Functions.PointMove(CurrentLocation, Functions.PreviousDir(Direction), 1);
loc[1] = Functions.PointMove(CurrentLocation, Direction, 1);
loc[2] = Functions.PointMove(CurrentLocation, Functions.NextDir(Direction), 1);
for (int i = 0; i < col; i++)
{
Point startPoint = loc[i];
for (int j = 0; j < row; j++)
{
Point hitPoint = Functions.PointMove(startPoint, Direction, j);
if (!CurrentMap.ValidPoint(hitPoint)) continue;
Cell cell = CurrentMap.GetCell(hitPoint);
if (cell.Objects == null) continue;
for (int k = 0; k < cell.Objects.Count; k++)
{
MapObject target = cell.Objects[k];
switch (target.Race)
{
case ObjectType.Monster:
case ObjectType.Player:
//Only targets
if (target.IsAttackTarget(this))
{
if (target.Attacked(this, j <= 1 ? damageFinal : (int)(damageFinal * 0.6), DefenceType.MAC, false) > 0)
LevelMagic(magic);
}
break;
}
}
}
}
}