// I attacked someone private void OnAttackPayload(AttackPayload payload) { foreach (Combatant target in payload.Targets) { var hitPayload = new HitPayload(payload, this, payload.Power); target.SendMessage(hitPayload); } }
// Someone hit me private void OnHitPayload(HitPayload payload) { var attacker = payload.Attacker; float totalDamage = 0; foreach (var damageEntry in payload.AttackPayload.DamageEntries) { var damage = _random.Next((int)damageEntry.MinDamage, (int)(damageEntry.MinDamage + damageEntry.DeltaDamage)); //TODO: damage reduction totalDamage += damage; } // if damage = 0 // parry/immune //if dodgechange < random // dodge //else Attributes[AttributeId.Hitpoints] = Math.Max(0, Attributes[AttributeId.Hitpoints] - (int)totalDamage); Zoned.Broadcast(new ServerFloatingNumberPacket(Zoned.Id, (int)totalDamage, FloatingNumberType.Damage)); if (Attributes[AttributeId.Hitpoints] == 0) { DeathPayload deathPayload = new DeathPayload(payload, this, payload.Power); SendMessage(deathPayload); } else { // We could play hit animation here if we had one } }
public DeathPayload(HitPayload hitPayload, Combatant victim, Power power) { this.HitPayload = hitPayload; this.Victim = victim; this.Power = power; }