Example #1
0
        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);
            }
        }
Example #2
0
        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);
            }
        }