public virtual void OnLootRoll(DungeonLootEntry entry, DungeonLootRoll roll)
        {
            if (entry == null || !entry.Valid)
            {
                return;
            }

            GroupMessage(
                m =>
                String.Format(
                    "{0} select{1} {2} for:  {3}",
                    m == roll.Mobile ? "You" : roll.Mobile.RawName,
                    m != roll.Mobile ? "s" : String.Empty,
                    roll.Action,
                    entry.Item.ResolveName(m).ToUpperWords()));
        }
        public virtual void OnLootWin(DungeonLootEntry entry, DungeonLootRoll roll, bool timeout)
        {
            if (entry == null || !entry.Valid)
            {
                return;
            }

            entry.Item.Movable = true;

            if (!GiveLoot(roll.Mobile, entry.Item, false))
            {
                entry.Winner = null;
                entry.Rolls.Remove(roll.Mobile);
                roll.Free();
                return;
            }

            foreach (var val in entry.Rolls.Values)
            {
                DungeonLootRoll r;

                if (val != null)
                {
                    r = val.Value;
                }
                else
                {
                    continue;
                }

                GroupMessage(
                    m =>
                    String.Format(
                        "{0} roll{1} {2}",
                        m == r.Mobile ? "You" : r.Mobile.RawName,
                        m != r.Mobile ? "s" : String.Empty,
                        r.Value));
            }

            GroupMessage(
                m =>
                String.Format(
                    "{0} receive{1} loot: {2}",
                    m == roll.Mobile ? "You" : roll.Mobile.RawName,
                    m != roll.Mobile ? "s" : String.Empty,
                    entry.Item.ResolveName(m).ToUpperWords()));
        }