public void EnemyHit(RealmTime time, EnemyHitPacket pkt)
{
try
{
var entity = Owner.GetEntity(pkt.TargetId);
var prj = (this as IProjectileOwner).Projectiles[pkt.BulletId];
prj.Damage = (int) statsMgr.GetAttackDamage(prj.Descriptor.MinDamage, prj.Descriptor.MaxDamage);
prj.ForceHit(entity, time);
if (pkt.Killed && !(entity is Wall))
{
psr.SendPacket(new UpdatePacket
{
Tiles = new UpdatePacket.TileData[0],
NewObjects = new[] {entity.ToDefinition()},
RemovedObjectIds = new[] {pkt.TargetId}
});
_clientEntities.Remove(entity);
}
}
catch
{
/*Console.ForegroundColor = ConsoleColor.DarkMagenta;
Console.WriteLine("CAN'T REGISTER HIT by player " + Name);
Console.ForegroundColor = ConsoleColor.White;
*
* Disabled, this message spams when an enemy dies*/
}
/*
if (entity != null && pkt.Killed) //Tolerance
{
Projectile prj = (this as IProjectileOwner).Projectiles[pkt.BulletId];
Position? entPos = entity.TryGetHistory((time.tickTimes - tickMapping) - pkt.Time);
Position? prjPos = prj == null ? null : (Position?)prj.GetPosition(pkt.Time + tickMapping - prj.BeginTime);
var tol1 = (entPos == null || prjPos == null) ? 10 : (prjPos.Value.X - entPos.Value.X) * (prjPos.Value.X - entPos.Value.X) + (prjPos.Value.Y - entPos.Value.Y) * (prjPos.Value.Y - entPos.Value.Y);
var tol2 = prj == null ? 10 : (prj.X - entity.X) * (prj.X - entity.X) + (prj.Y - entity.Y) * (prj.Y - entity.Y);
if (prj != null && (tol1 < 1 || tol2 < 1))
{
prj.ForceHit(entity, time);
}
else
{
Console.ForegroundColor = ConsoleColor.DarkMagenta;
Console.WriteLine("CAN'T REGISTER HIT!" + " X: " + tol1 + " Y: " + tol2);
Console.ForegroundColor = ConsoleColor.White;
psr.SendPacket(new UpdatePacket()
{
Tiles = new UpdatePacket.TileData[0],
NewObjects = new ObjectDef[] { entity.ToDefinition() },
RemovedObjectIds = new int[] { pkt.TargetId }
});
clientEntities.Remove(entity);
}
}
else if (pkt.Killed)
{
psr.SendPacket(new UpdatePacket()
{
Tiles = new UpdatePacket.TileData[0],
NewObjects = Empty<ObjectDef>.Array,
RemovedObjectIds = new int[] { pkt.TargetId }
});
}*/
}