public static AggressorInfo Create( Mobile attacker, Mobile defender, bool criminal ) { AggressorInfo info; if ( m_Pool.Count > 0 ) { info = (AggressorInfo)m_Pool.Dequeue(); info.m_Attacker = attacker; info.m_Defender = defender; info.m_CanReportMurder = criminal; info.m_CriminalAggression = criminal; info.m_Queued = false; info.Refresh(); } else { info = new AggressorInfo( attacker, defender, criminal ); } return info; }
private void GiveMagicItems() { ArrayList toGive = new ArrayList(); ArrayList list = m_mobile.Aggressors; for (int i = 0; i < list.Count; ++i) { AggressorInfo info = (AggressorInfo)list[i]; if (info.Attacker.Player && info.Attacker.Alive && (DateTime.Now - info.LastCombatTime) < TimeSpan.FromSeconds(30.0) && !toGive.Contains(info.Attacker)) { toGive.Add(info.Attacker); } } list = m_mobile.Aggressed; for (int i = 0; i < list.Count; ++i) { AggressorInfo info = (AggressorInfo)list[i]; if (info.Defender.Player && info.Defender.Alive && (DateTime.Now - info.LastCombatTime) < TimeSpan.FromSeconds(30.0) && !toGive.Contains(info.Defender)) { toGive.Add(info.Defender); } } if (toGive.Count == 0) { return; } // Randomize for (int i = 0; i < toGive.Count; ++i) { int rand = Utility.Random(toGive.Count); object hold = toGive[i]; toGive[i] = toGive[rand]; toGive[rand] = hold; } for (int i = 0; i < CoreChamp.AmountOfMagicLoot; ++i) { int level; double random = Utility.RandomDouble(); if (0.1 >= random) { level = CoreChamp.MaxMagicDropLevel; // Vanquishing Weapons/Invulnerability Armor } else if (0.4 >= random) { level = (CoreChamp.MinMagicDropLevel + CoreChamp.MaxMagicDropLevel) / 2; // Power Weapons/Fortification Armor } else { level = CoreChamp.MinMagicDropLevel; // Force Weapons/Hardening Armor } Mobile m = (Mobile)toGive[i % toGive.Count]; Item reward; if (Utility.RandomBool()) { reward = CreateWeapon(level); } else { reward = CreateArmor(level); } if (reward != null) { m.SendMessage("You have received a magic item!"); m.AddToBackpack(reward); } } }