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;
}