public boolean addWarrant(Law laws, LegalWarrant W)
	{
		if(!theLawIsEnabled())
			return false;
		if((laws!=null)&&(!laws.warrants().contains(W)))
		{
			final Room R=CMLib.map().roomLocation(W.criminal());
			if(R!=null)
			{
				MOB accuser=W.witness();
				if(accuser==null)
					accuser=W.victim();
				if(accuser==null)
					accuser=W.criminal();
				final CMMsg msg=CMClass.getMsg(accuser, W.criminal(), W.victim(),
						CMMsg.MASK_ALWAYS|CMMsg.MSG_LEGALWARRANT, CMMsg.MSG_LEGALWARRANT, CMMsg.MSG_LEGALWARRANT, W.crime());
				if(R.okMessage(W.criminal(),msg))
					R.send(W.criminal(), msg);
				else
					return false;
			}
			laws.warrants().add(W);
			if(W.criminal()!=null)
			{
				final List<String> channels=CMLib.channels().getFlaggedChannelNames(ChannelsLibrary.ChannelFlag.WARRANTS);
				for(int i=0;i<channels.size();i++)
					CMLib.commands().postChannel(channels.get(i),null,L("@x1 has been accused of @x2.",W.criminal().name(),fixCharge(W)),true);
			}
			return true;
		}
		return false;
	}