@Override
	public void executeMsg(Environmental host, CMMsg msg)
	{
		if(owner() instanceof MOB)
		{
			// check to see if this event is a LOOK or EXAMINE event
			// and see of the target of the action is the owner of
			// this hand of cards, and also check quickly whether
			// the player HAS any cards.
			if(((msg.targetMinor()==CMMsg.TYP_LOOK)||(msg.targetMinor()==CMMsg.TYP_EXAMINE))
			&&(msg.target()==owner())
			&&(numberOfCards()>0))
			{
				// now we build a string list of the cards which
				// are marked as FACE-UP
				final StringBuffer str=new StringBuffer("");
				final List<Item> cards=getContents();
				for(int c=0;c<cards.size();c++)
				{
					final PlayingCard card=(PlayingCard)cards.get(c);
					if(card.isFaceUp())
						str.append(card.name()+", ");
				}

				// now we have that list, so we generate a new OK (always occurs)
				// message to notify the looker of what our player has.  We add our
				// new message as a "trailer" to ensure it happens after the
				// primary event has taken place.  Remember, at this point, we
				// are capturing an event in mid-stride.  This event we have
				// captured has not completed executing yet.
				if(str.length()>0)
					msg.addTrailerMsg(CMClass.getMsg(msg.source(),owner(),null,CMMsg.MSG_OK_VISUAL,L("<T-NAME> <T-HAS-HAVE> the following cards shown: @x1.",str.toString().substring(0,str.length()-2)),CMMsg.NO_EFFECT,null,CMMsg.NO_EFFECT,null));
			}
		}
		super.executeMsg(host,msg);
	}