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-2019 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(final 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 long ignoreUntilTime = 0; private String warnMsg = null; @Override public void setArrestingOfficer(final Area legalArea, final 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 punishmentCode() { return punishment; } @Override public String getPunishmentParm(final int code) { final int index = punishmentParms.indexOf(Integer.valueOf(code)); if (index < 0) return ""; return (String) punishmentParms.elementAt(index, 2); } @Override public void addPunishmentParm(final int code, final 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(final MOB mob) { criminal = mob; } @Override public void setVictim(final MOB mob) { victim = mob; } @Override public void setWitness(final MOB mob) { witness = mob; } @Override public void setJail(final Room R) { jail = R; } @Override public void setReleaseRoom(final Room R) { releaseRoom = R; } @Override public void setCrime(final String newcrime) { crime = newcrime; } @Override public void setPunishment(final int code) { punishment = code; } @Override public void setJailTime(final int time) { jailTime = time; } @Override public void setState(final int newstate) { lastStateChangeTime=System.currentTimeMillis(); if(newstate != state) { if(criminal() != null) { final Room R=criminal().location(); if(R!=null) { final CMMsg msg=CMClass.getMsg(criminal(), victim(), arrestingOfficer(), CMMsg.MASK_ALWAYS|CMMsg.MSG_LEGALSTATE, CMMsg.MSG_LEGALSTATE, CMMsg.MSG_LEGALSTATE, crime()); msg.setValue(newstate); if(R.okMessage(criminal(),msg)) { R.send(criminal(), msg); CMLib.map().sendGlobalMessage(criminal(), CMMsg.TYP_LEGALSTATE, msg); } } } state = newstate; } } @Override public long getLastStateChangeTime() { return lastStateChangeTime; } @Override public void setOffenses(final int num) { offenses = num; } @Override public void setLastOffense(final long last) { lastOffense = last; } @Override public void setTravelAttemptTime(final long time) { travelAttemptTime = time; } @Override public void setWarnMsg(final String msg) { warnMsg = msg; } @Override public long getIgnoreUntilTime() { return ignoreUntilTime; } @Override public void setIgnoreUntilTime(final long time) { this.ignoreUntilTime = time; } }