Server.Mobiles.BaseCreature.GetLootingRights C# (CSharp) Method

GetLootingRights() public static method

public static GetLootingRights ( List damageEntries, int hitsMax ) : List
damageEntries List
hitsMax int
return List
        public static List<DamageStore> GetLootingRights( List<DamageEntry> damageEntries, int hitsMax )
        {
            List<DamageStore> rights = new List<DamageStore>();

            for ( int i = damageEntries.Count - 1; i >= 0; --i )
            {
                if ( i >= damageEntries.Count )
                    continue;

                DamageEntry de = damageEntries[i];

                if ( de.HasExpired )
                {
                    damageEntries.RemoveAt( i );
                    continue;
                }

                int damage = de.DamageGiven;

                List<DamageEntry> respList = de.Responsible;

                if ( respList != null )
                {
                    for ( int j = 0; j < respList.Count; ++j )
                    {
                        DamageEntry subEntry = respList[j];
                        Mobile master = subEntry.Damager;

                        if ( master == null || master.Deleted || !master.Player )
                            continue;

                        bool needNewSubEntry = true;

                        for ( int k = 0; needNewSubEntry && k < rights.Count; ++k )
                        {
                            DamageStore ds = rights[k];

                            if ( ds.m_Mobile == master )
                            {
                                ds.m_Damage += subEntry.DamageGiven;
                                needNewSubEntry = false;
                            }
                        }

                        if ( needNewSubEntry )
                            rights.Add( new DamageStore( master, subEntry.DamageGiven ) );

                        damage -= subEntry.DamageGiven;
                    }
                }

                Mobile m = de.Damager;

                if ( m == null || m.Deleted || !m.Player )
                    continue;

                if ( damage <= 0 )
                    continue;

                bool needNewEntry = true;

                for ( int j = 0; needNewEntry && j < rights.Count; ++j )
                {
                    DamageStore ds = rights[j];

                    if ( ds.m_Mobile == m )
                    {
                        ds.m_Damage += damage;
                        needNewEntry = false;
                    }
                }

                if ( needNewEntry )
                    rights.Add( new DamageStore( m, damage ) );
            }

            if ( rights.Count > 0 )
            {
                rights[0].m_Damage = (int)(rights[0].m_Damage * 1.25);	//This would be the first valid person attacking it.  Gets a 25% bonus.  Per 1/19/07 Five on Friday

                if ( rights.Count > 1 )
                    rights.Sort(); //Sort by damage

                int topDamage = rights[0].m_Damage;
                int minDamage;

                if ( hitsMax >= 3000 )
                    minDamage = topDamage / 16;
                else if ( hitsMax >= 1000 )
                    minDamage = topDamage / 8;
                else if ( hitsMax >= 200 )
                    minDamage = topDamage / 4;
                else
                    minDamage = topDamage / 2;

                for ( int i = 0; i < rights.Count; ++i )
                {
                    DamageStore ds = rights[i];

                    ds.m_HasRight = ( ds.m_Damage >= minDamage );
                }
            }

            return rights;
        }

Usage Example

コード例 #1
0
ファイル: BaseChampion.cs プロジェクト: nogu3ira/xrunuo
        protected override void OnAfterDeath(Container c)
        {
            if (Map == Map.Felucca && DropSkull)
            {
                // Get the first mobile in the top attackers list that is in range.
                Mobile to = BaseCreature.GetLootingRights(this.DamageEntries, this.HitsMax)
                            .OrderByDescending(e => e.DamagePercent)
                            .Select(e => e.Mobile)
                            .FirstOrDefault(m => m.InRange(c, 90));

                Container target = null;

                if (to != null)
                {
                    target = to.Backpack;
                }
                else
                {
                    target = c;                     // If no candidates, the skull goes to the champion's corpse.
                }
                if (target != null)                 // Sanity.
                {
                    target.DropItem(new ChampionSkull(SkullType));
                }
            }

            base.OnAfterDeath(c);
        }
All Usage Examples Of Server.Mobiles.BaseCreature::GetLootingRights
BaseCreature