/
com/planet_ink/coffee_mud/Abilities/Common/
com/planet_ink/coffee_mud/Abilities/Diseases/
com/planet_ink/coffee_mud/Abilities/Druid/
com/planet_ink/coffee_mud/Abilities/Fighter/
com/planet_ink/coffee_mud/Abilities/Languages/
com/planet_ink/coffee_mud/Abilities/Misc/
com/planet_ink/coffee_mud/Abilities/Prayers/
com/planet_ink/coffee_mud/Abilities/Properties/
com/planet_ink/coffee_mud/Abilities/Skills/
com/planet_ink/coffee_mud/Abilities/Songs/
com/planet_ink/coffee_mud/Abilities/Spells/
com/planet_ink/coffee_mud/Abilities/Thief/
com/planet_ink/coffee_mud/Abilities/Traps/
com/planet_ink/coffee_mud/Behaviors/
com/planet_ink/coffee_mud/CharClasses/interfaces/
com/planet_ink/coffee_mud/Commands/
com/planet_ink/coffee_mud/Commands/interfaces/
com/planet_ink/coffee_mud/Common/
com/planet_ink/coffee_mud/Common/interfaces/
com/planet_ink/coffee_mud/Exits/interfaces/
com/planet_ink/coffee_mud/Items/Armor/
com/planet_ink/coffee_mud/Items/Basic/
com/planet_ink/coffee_mud/Items/CompTech/
com/planet_ink/coffee_mud/Items/MiscMagic/
com/planet_ink/coffee_mud/Items/Weapons/
com/planet_ink/coffee_mud/Items/interfaces/
com/planet_ink/coffee_mud/Libraries/
com/planet_ink/coffee_mud/Libraries/interfaces/
com/planet_ink/coffee_mud/Locales/
com/planet_ink/coffee_mud/MOBS/
com/planet_ink/coffee_mud/Races/
com/planet_ink/coffee_mud/Races/interfaces/
com/planet_ink/coffee_mud/WebMacros/
com/planet_ink/coffee_mud/WebMacros/interfaces/
com/planet_ink/coffee_mud/core/
com/planet_ink/coffee_mud/core/collections/
com/planet_ink/coffee_mud/core/interfaces/
com/planet_ink/coffee_mud/core/intermud/
com/planet_ink/coffee_mud/core/intermud/i3/
com/planet_ink/coffee_web/server/
com/planet_ink/siplet/applet/
lib/
resources/factions/
resources/fakedb/
resources/progs/autoplayer/
resources/quests/holidays/
web/
web/admin.templates/
web/admin/grinder/
web/admin/images/
web/clan.templates/
web/pub.templates/
web/pub/images/mxp/
web/pub/sounds/
web/pub/textedit/
package com.planet_ink.coffee_mud.Common;
import com.planet_ink.coffee_mud.core.interfaces.*;
import com.planet_ink.coffee_mud.core.*;
import com.planet_ink.coffee_mud.core.collections.*;
import com.planet_ink.coffee_mud.Abilities.interfaces.*;
import com.planet_ink.coffee_mud.Areas.interfaces.*;
import com.planet_ink.coffee_mud.Behaviors.interfaces.*;
import com.planet_ink.coffee_mud.CharClasses.interfaces.*;
import com.planet_ink.coffee_mud.Commands.interfaces.*;
import com.planet_ink.coffee_mud.Common.interfaces.*;
import com.planet_ink.coffee_mud.Exits.interfaces.*;
import com.planet_ink.coffee_mud.Items.interfaces.*;
import com.planet_ink.coffee_mud.Libraries.interfaces.*;
import com.planet_ink.coffee_mud.Locales.interfaces.*;
import com.planet_ink.coffee_mud.MOBS.interfaces.*;
import com.planet_ink.coffee_mud.Races.interfaces.*;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;
import java.util.Vector;

/*
   Copyright 2005-2016 Bo Zimmerman

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

	   http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/
public class DefaultArrestWarrant implements LegalWarrant
{
	@Override
	public String ID()
	{
		return "DefaultArrestWarrant";
	}

	@Override
	public String name()
	{
		return ID();
	}

	@Override
	public CMObject newInstance()
	{
		try
		{
			return getClass().newInstance();
		}
		catch (final Exception e)
		{
			return new DefaultArrestWarrant();
		}
	}

	@Override
	public int compareTo(CMObject o)
	{
		return CMClass.classID(this).compareToIgnoreCase(CMClass.classID(o));
	}

	@Override
	public void initializeClass()
	{
	}

	@Override
	public CMObject copyOf()
	{
		try
		{
			return (DefaultArrestWarrant) this.clone();
		}
		catch (final CloneNotSupportedException e)
		{
			return newInstance();
		}
	}

	private MOB				criminal			= null;
	private MOB				victim				= null;
	private MOB				witness				= null;
	private MOB				arrestingOfficer	= null;
	private Room			jail				= null;
	private Room			releaseRoom			= null;
	private String			crime				= "";
	private final DVector	punishmentParms		= new DVector(2);
	private int				punishment			= -1;
	private int				jailTime			= 0;
	private int				state				= 0;
	private int				offenses			= 0;
	private long			lastOffense			= 0;
	private long			travelAttemptTime	= 0;
	private long			lastStateChangeTime = 0;
	private String			warnMsg				= null;

	@Override
	public void setArrestingOfficer(Area legalArea, MOB mob)
	{
		if ((arrestingOfficer != null) 
		&& (arrestingOfficer.getStartRoom() != null) 
		&& (arrestingOfficer.location() != null) 
		&& (legalArea != null)
		&& (arrestingOfficer.getStartRoom().getArea() != arrestingOfficer.location().getArea()) 
		&& (!legalArea.inMyMetroArea(arrestingOfficer.location().getArea())))
			CMLib.tracking().wanderAway(arrestingOfficer, true, true);
		
		if ((mob == null) && (arrestingOfficer != null))
			CMLib.tracking().stopTracking(arrestingOfficer);
		arrestingOfficer = mob;
	}

	@Override
	public MOB criminal()
	{
		return criminal;
	}

	@Override
	public MOB victim()
	{
		return victim;
	}

	@Override
	public MOB witness()
	{
		return witness;
	}

	@Override
	public MOB arrestingOfficer()
	{
		return arrestingOfficer;
	}

	@Override
	public Room jail()
	{
		return CMLib.map().getRoom(jail);
	}

	@Override
	public Room releaseRoom()
	{
		return CMLib.map().getRoom(releaseRoom);
	}

	@Override
	public String crime()
	{
		return crime;
	}

	@Override
	public int punishment()
	{
		return punishment;
	}

	@Override
	public String getPunishmentParm(int code)
	{
		final int index = punishmentParms.indexOf(Integer.valueOf(code));
		if (index < 0)
			return "";
		return (String) punishmentParms.elementAt(index, 2);
	}

	@Override
	public void addPunishmentParm(int code, String parm)
	{
		final int index = punishmentParms.indexOf(Integer.valueOf(code));
		if (index >= 0)
			punishmentParms.removeElementAt(index);
		punishmentParms.addElement(Integer.valueOf(code), parm);
	}

	@Override
	public int jailTime()
	{
		return jailTime;
	}

	@Override
	public int state()
	{
		return state;
	}

	@Override
	public int offenses()
	{
		return offenses;
	}

	@Override
	public long lastOffense()
	{
		return lastOffense;
	}

	@Override
	public long travelAttemptTime()
	{
		return travelAttemptTime;
	}

	@Override
	public String warnMsg()
	{
		return warnMsg;
	}

	@Override
	public void setCriminal(MOB mob)
	{
		criminal = mob;
	}

	@Override
	public void setVictim(MOB mob)
	{
		victim = mob;
	}

	@Override
	public void setWitness(MOB mob)
	{
		witness = mob;
	}

	@Override
	public void setJail(Room R)
	{
		jail = R;
	}

	@Override
	public void setReleaseRoom(Room R)
	{
		releaseRoom = R;
	}

	@Override
	public void setCrime(String newcrime)
	{
		crime = newcrime;
	}

	@Override
	public void setPunishment(int code)
	{
		punishment = code;
	}

	@Override
	public void setJailTime(int time)
	{
		jailTime = time;
	}

	@Override
	public void setState(int newstate)
	{
		lastStateChangeTime=System.currentTimeMillis();
		state = newstate;
	}

	@Override
	public long getLastStateChangeTime()
	{
		return lastStateChangeTime;
	}
	
	@Override
	public void setOffenses(int num)
	{
		offenses = num;
	}

	@Override
	public void setLastOffense(long last)
	{
		lastOffense = last;
	}

	@Override
	public void setTravelAttemptTime(long time)
	{
		travelAttemptTime = time;
	}

	@Override
	public void setWarnMsg(String msg)
	{
		warnMsg = msg;
	}
}