private async Task Process(DeathPayload payload) { using (var factory = _dbContextHelper.GetFactory()) { var dbContext = factory.GetDbContext(); bool isValidAttackerId = (payload.AttackerCharacterId != null && payload.AttackerCharacterId.Length > 18); bool isValidVictimId = (payload.CharacterId != null && payload.CharacterId.Length > 18); try { var TaskList = new List <Task>(); Task <OutfitMember> attackerOutfitTask = null; Task <OutfitMember> victimOutfitTask = null; if (isValidAttackerId == true) { attackerOutfitTask = _characterService.GetCharactersOutfitAsync(payload.AttackerCharacterId); TaskList.Add(attackerOutfitTask); } if (isValidVictimId == true) { victimOutfitTask = _characterService.GetCharactersOutfitAsync(payload.CharacterId); TaskList.Add(victimOutfitTask); } await Task.WhenAll(TaskList); TaskList.Clear(); int attackerFactionId = await dbContext.Characters .Where(c => c.Id == payload.AttackerCharacterId) .Select(c => c.FactionId) .FirstOrDefaultAsync(); int victimFactionId = await dbContext.Characters .Where(c => c.Id == payload.CharacterId) .Select(c => c.FactionId) .FirstOrDefaultAsync(); DeathEventType deathEventType; if (isValidAttackerId == true) { if (payload.AttackerCharacterId == payload.CharacterId) { deathEventType = DeathEventType.Suicide; } else if (attackerFactionId == victimFactionId) { deathEventType = DeathEventType.Teamkill; } else { deathEventType = DeathEventType.Kill; } } else { deathEventType = DeathEventType.Suicide; } var dataModel = new Shared.Models.Death { AttackerCharacterId = payload.AttackerCharacterId, AttackerFireModeId = payload.AttackerFireModeId, AttackerLoadoutId = payload.AttackerLoadoutId, AttackerVehicleId = payload.AttackerVehicleId, AttackerWeaponId = payload.AttackerWeaponId, AttackerOutfitId = attackerOutfitTask?.Result?.OutfitId, AttackerFactionId = attackerFactionId, CharacterId = payload.CharacterId, CharacterLoadoutId = payload.CharacterLoadoutId, CharacterOutfitId = victimOutfitTask?.Result?.OutfitId, CharacterFactionId = victimFactionId, IsHeadshot = payload.IsHeadshot, DeathEventType = deathEventType, Timestamp = payload.Timestamp, WorldId = payload.WorldId, ZoneId = payload.ZoneId.Value }; dbContext.Deaths.Add(dataModel); await dbContext.SaveChangesAsync(); } catch (Exception) { //Ignore } } }
public void Kill(PowerContext context = null, bool lootAndExp = false) { var deathload = new DeathPayload(context, Powers.DamageType.Physical, this, lootAndExp); deathload.Apply(); }