public void HandlePlayerDeath(PlayerMobile victim) { VvVPlayerEntry ventry = GetPlayerEntry <VvVPlayerEntry>(victim); if (ventry != null && ventry.Active) { List <DamageEntry> list = victim.DamageEntries.OrderBy(d => - d.DamageGiven).ToList(); List <Mobile> handled = new List <Mobile>(); bool statloss = false; for (int i = 0; i < list.Count; i++) { Mobile dam = list[i].Damager; if (dam is BaseCreature && ((BaseCreature)dam).GetMaster() is PlayerMobile) { dam = ((BaseCreature)dam).GetMaster(); } bool isEnemy = IsEnemy(victim, dam); if (isEnemy && dam != null && Battle.IsInActiveBattle(dam, victim)) { VvVPlayerEntry kentry = GetPlayerEntry <VvVPlayerEntry>(dam); if (kentry != null && !handled.Contains(dam)) { if (i == 0) { Battle.Update(ventry, kentry, UpdateType.Kill); } else { Battle.Update(ventry, kentry, UpdateType.Assist); } handled.Add(dam); } } if (!statloss && isEnemy) { statloss = true; } } if (statloss) { Faction.ApplySkillLoss(victim); } ColUtility.Free(list); ColUtility.Free(handled); } }
public void HandlePlayerDeath(PlayerMobile victim) { VvVPlayerEntry ventry = GetPlayerEntry <VvVPlayerEntry>(victim); if (ventry != null && ventry.Active) { List <DamageEntry> list = victim.DamageEntries.OrderBy(d => - d.DamageGiven).ToList(); List <Mobile> handled = new List <Mobile>(); bool statloss = false; for (int i = 0; i < list.Count; i++) { Mobile dam = list[i].Damager; if (dam == victim || dam == null) { continue; } if (dam is BaseCreature creature && creature.GetMaster() is PlayerMobile) { dam = creature.GetMaster(); } bool isEnemy = IsEnemy(victim, dam); if (isEnemy) { VvVPlayerEntry kentry = GetPlayerEntry <VvVPlayerEntry>(dam); if (kentry != null && kentry.Active && !handled.Contains(dam)) { if (Battle.IsInActiveBattle(dam, victim)) { if (i == 0) { Battle.Update(ventry, kentry, UpdateType.Kill); } else { Battle.Update(ventry, kentry, UpdateType.Assist); } } handled.Add(dam); kentry.TotalKills++; if (EnhancedRules) { kentry.AwardSilver(victim); } } if (!handled.Contains(victim)) { ventry.TotalDeaths++; handled.Add(victim); } } if (!statloss && isEnemy) { statloss = true; } } if (statloss) { ApplySkillLoss(victim); } ColUtility.Free(list); ColUtility.Free(handled); } }