Index: trunk/L2_Gameserver/java/config/options.properties =================================================================== --- trunk/L2_Gameserver/java/config/options.properties (revision 2001) +++ trunk/L2_Gameserver/java/config/options.properties (revision 2012) @@ -48,5 +48,7 @@ # 2 - kick player(default) # 3 - kick & ban player +# 4 - jail player (define minutes of jail with param: 0 = infinite) DefaultPunish = 2 +DefaultPunishParam = 0 # Bypass exploit protection Index: trunk/L2_Gameserver/java/config/other.properties =================================================================== --- trunk/L2_Gameserver/java/config/other.properties (revision 2007) +++ trunk/L2_Gameserver/java/config/other.properties (revision 2012) @@ -129,2 +129,5 @@ # Total number of petitions pending, if more are submitted they will be rejected. MaxPetitionsPending = 25 + +# Jail +JailIsPvp = True Index: trunk/L2_Gameserver/java/net/sf/l2j/Config.java =================================================================== --- trunk/L2_Gameserver/java/net/sf/l2j/Config.java (revision 2000) +++ trunk/L2_Gameserver/java/net/sf/l2j/Config.java (revision 2012) @@ -357,4 +357,7 @@ /** Allow fishing ? */ public static boolean ALLOWFISHING; + + /** Jail config **/ + public static boolean JAIL_IS_PVP; /** Enumeration describing values for Allowing the use of L2Walker client */ @@ -723,6 +726,8 @@ public static boolean FORCE_GGAUTH; - /** Deafult punishment for illegal actions */ + /** Default punishment for illegal actions */ public static int DEFAULT_PUNISH; + /** Parameter for default punishment */ + public static int DEFAULT_PUNISH_PARAM; /** Accept new game server ? */ @@ -940,4 +945,5 @@ DEFAULT_PUNISH = Integer.parseInt(optionsSettings.getProperty("DefaultPunish", "2")); + DEFAULT_PUNISH_PARAM = Integer.parseInt(optionsSettings.getProperty("DefaultPunishParam", "0")); LAZY_CACHE = Boolean.valueOf(optionsSettings.getProperty("LazyCache", "False")); @@ -1129,4 +1135,6 @@ MAX_PETITIONS_PER_PLAYER = Integer.parseInt(otherSettings.getProperty("MaxPetitionsPerPlayer", "5")); MAX_PETITIONS_PENDING = Integer.parseInt(otherSettings.getProperty("MaxPetitionsPending", "25")); + + JAIL_IS_PVP = Boolean.valueOf(otherSettings.getProperty("JailIsPvp", "True")); } catch (Exception e) Index: trunk/L2_Gameserver/java/net/sf/l2j/gameserver/clientpackets/RequestRestartPoint.java =================================================================== --- trunk/L2_Gameserver/java/net/sf/l2j/gameserver/clientpackets/RequestRestartPoint.java (revision 1759) +++ trunk/L2_Gameserver/java/net/sf/l2j/gameserver/clientpackets/RequestRestartPoint.java (revision 2012) @@ -70,6 +70,8 @@ try { - Location loc; - if (requestedPointType == 1) // to clanhall + Location loc = null; + if (activeChar.isInJail()) // to jail + loc = new Location(-114356, -249645, -2984); + else if (requestedPointType == 1) // to clanhall loc = MapRegionTable.getInstance().getTeleToLocation(activeChar, MapRegionTable.TeleportWhereType.ClanHall); else if (requestedPointType == 2) // to castle Index: trunk/L2_Gameserver/java/net/sf/l2j/gameserver/clientpackets/Say2.java =================================================================== --- trunk/L2_Gameserver/java/net/sf/l2j/gameserver/clientpackets/Say2.java (revision 1990) +++ trunk/L2_Gameserver/java/net/sf/l2j/gameserver/clientpackets/Say2.java (revision 2012) @@ -121,4 +121,13 @@ } } + + if (activeChar.isInJail()) + { + if (_type == SHOUT || _type == TRADE) + { + activeChar.sendMessage("You can not chat with the outside of the jail."); + return; + } + } if (_type == PETITION_PLAYER && activeChar.isGM()) Index: trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminBan.java =================================================================== --- trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminBan.java (revision 1896) +++ trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminBan.java (revision 2012) @@ -19,4 +19,5 @@ package net.sf.l2j.gameserver.handler.admincommandhandlers; +import java.util.NoSuchElementException; import java.util.StringTokenizer; @@ -28,5 +29,4 @@ import net.sf.l2j.gameserver.model.L2World; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; -import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage; /** @@ -63,15 +63,15 @@ catch(Exception e) { - L2Object target = activeChar.getTarget(); - if (target!=null && target instanceof L2PcInstance) - plyr = (L2PcInstance)target; - else - activeChar.sendMessage("Wrong parameter or target"); + L2Object target = activeChar.getTarget(); + if (target!=null && target instanceof L2PcInstance) + plyr = (L2PcInstance)target; + else + activeChar.sendMessage("Wrong parameter or target"); } if (plyr!=null && !plyr.equals(activeChar)) // you cannot ban yourself! { - player = plyr.getName(); - LoginServerThread.getInstance().sendAccessLevel(player, -100); + player = plyr.getName(); + LoginServerThread.getInstance().sendAccessLevel(player, -100); plyr.logout(); } @@ -86,5 +86,5 @@ catch(Exception e) { - e.printStackTrace(); + if (Config.DEBUG) e.printStackTrace(); } } @@ -94,18 +94,24 @@ { player = st.nextToken(); + int delay = 0; + try + { + delay = Integer.parseInt(st.nextToken()); + } catch (NumberFormatException nfe) { + } catch (NoSuchElementException nsee) {} L2PcInstance playerObj = L2World.getInstance().getPlayer(player); - - NpcHtmlMessage msg = new NpcHtmlMessage(0); - msg.setHtml("You are abused server rules."); - playerObj.sendPacket(msg); - playerObj.teleToLocation(-114356,-249645,-2984); - - activeChar.sendMessage("Character "+player+" jailed"); - - } - catch(Exception e) + if (playerObj != null) + { + playerObj.setInJail(true, delay); + activeChar.sendMessage("Character "+player+" jailed for "+(delay>0 ? delay+" minutes." : "ever!")); + } else + activeChar.sendMessage("Character not found!"); + } catch (NoSuchElementException nsee) { - e.printStackTrace(); + activeChar.sendMessage("Specify a character name."); + } catch(Exception e) + { + if (Config.DEBUG) e.printStackTrace(); } } @@ -117,19 +123,22 @@ L2PcInstance playerObj = L2World.getInstance().getPlayer(player); - playerObj.teleToLocation(activeChar.getPosition().getX(), - activeChar.getPosition().getY(), - activeChar.getPosition().getZ()); - - activeChar.sendMessage("Character "+player+" removed from jail"); - - } - catch(Exception e) + if (playerObj != null) + { + playerObj.stopJailTask(false); + playerObj.setInJail(false); + activeChar.sendMessage("Character "+player+" removed from jail"); + } else + activeChar.sendMessage("Character not found!"); + } catch (NoSuchElementException nsee) { - e.printStackTrace(); + activeChar.sendMessage("Specify a character name."); + } catch(Exception e) + { + if (Config.DEBUG) e.printStackTrace(); } } if (!"".equals(player)) - GMAudit.auditGMAction(activeChar.getName(), command, player, ""); + GMAudit.auditGMAction(activeChar.getName(), command, player, ""); return true; Index: trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/itemhandlers/ScrollOfEscape.java =================================================================== --- trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/itemhandlers/ScrollOfEscape.java (revision 1868) +++ trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/itemhandlers/ScrollOfEscape.java (revision 2012) @@ -19,4 +19,5 @@ package net.sf.l2j.gameserver.handler.itemhandlers; +import net.sf.l2j.Config; import net.sf.l2j.gameserver.GameTimeController; import net.sf.l2j.gameserver.MapRegionTable; @@ -69,4 +70,11 @@ { activeChar.sendPacket(SystemMessage.sendString("You may not use an escape skill in a festival.")); + return; + } + + // Check to see if player is in jail + if (activeChar.isInJail()) + { + activeChar.sendPacket(SystemMessage.sendString("You can not escape from jail.")); return; } @@ -210,5 +218,5 @@ } } catch (Throwable e) { - e.printStackTrace(); + if (Config.DEBUG) e.printStackTrace(); } } Index: trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/skillhandlers/Recall.java =================================================================== --- trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/skillhandlers/Recall.java (revision 1384) +++ trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/skillhandlers/Recall.java (revision 2012) @@ -1,4 +1,5 @@ package net.sf.l2j.gameserver.handler.skillhandlers; +import net.sf.l2j.Config; import net.sf.l2j.gameserver.MapRegionTable; import net.sf.l2j.gameserver.handler.ISkillHandler; @@ -17,24 +18,35 @@ public void useSkill(@SuppressWarnings("unused") L2Character activeChar, @SuppressWarnings("unused") L2Skill skill, L2Object[] targets) { - try { + try + { for (int index = 0; index < targets.length; index++) { -// if (!(targets[index] instanceof L2PcInstance)) -// continue; + if (!(targets[index] instanceof L2Character)) + continue; - L2Character target = (L2Character) targets[index]; + L2Character target = (L2Character)targets[index]; - // Check to see if the current player target is in a festival. - L2PcInstance targetChar = (L2PcInstance)target; + if (target instanceof L2PcInstance) + { + L2PcInstance targetChar = (L2PcInstance)target; - if (targetChar.isFestivalParticipant()) { - targetChar.sendPacket(SystemMessage.sendString("You may not use an escape skill in a festival.")); - break; + // Check to see if the current player target is in a festival. + if (targetChar.isFestivalParticipant()) { + targetChar.sendPacket(SystemMessage.sendString("You may not use an escape skill in a festival.")); + continue; + } + + // Check to see if player is in jail + if (targetChar.isInJail()) + { + targetChar.sendPacket(SystemMessage.sendString("You can not escape from jail.")); + continue; + } } target.teleToLocation(MapRegionTable.TeleportWhereType.Town); } - } catch (Throwable e) { - e.printStackTrace(); + } catch (Throwable e) { + if (Config.DEBUG) e.printStackTrace(); } } Index: trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/usercommandhandlers/Escape.java =================================================================== --- trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/usercommandhandlers/Escape.java (revision 2003) +++ trunk/L2_Gameserver/java/net/sf/l2j/gameserver/handler/usercommandhandlers/Escape.java (revision 2012) @@ -37,5 +37,5 @@ { private static final int[] COMMAND_IDS = { 52 }; - private static final int REQUIRED_LEVEL = Config.GM_ESCAPE; + private static final int REQUIRED_LEVEL = Config.GM_ESCAPE; /* (non-Javadoc) @@ -48,4 +48,18 @@ int unstuckTimer = (activeChar.getAccessLevel() >=REQUIRED_LEVEL? 5000 : Config.UNSTUCK_INTERVAL*1000 ); + + // Check to see if the player is in a festival. + if (activeChar.isFestivalParticipant()) + { + activeChar.sendPacket(SystemMessage.sendString("You may not use an escape command in a festival.")); + return false; + } + + // Check to see if player is in jail + if (activeChar.isInJail()) + { + activeChar.sendPacket(SystemMessage.sendString("You can not escape from jail.")); + return false; + } SystemMessage sm = new SystemMessage(SystemMessage.S1_S2); @@ -88,5 +102,5 @@ { _activeChar.teleToLocation(MapRegionTable.TeleportWhereType.Town); - } catch (Throwable e) { e.printStackTrace(); } + } catch (Throwable e) { if (Config.DEBUG) e.printStackTrace(); } } } Index: trunk/L2_Gameserver/java/net/sf/l2j/gameserver/instancemanager/ZoneManager.java =================================================================== --- trunk/L2_Gameserver/java/net/sf/l2j/gameserver/instancemanager/ZoneManager.java (revision 1957) +++ trunk/L2_Gameserver/java/net/sf/l2j/gameserver/instancemanager/ZoneManager.java (revision 2012) @@ -125,5 +125,6 @@ Config.ZONE_TOWN == 2 && // Zone Town is set as PvP and TownManager.getInstance().checkIfInZone(x, y) // object is inside town zone - ) + ) || + (Config.JAIL_IS_PVP && checkIfInZone(ZoneType.getZoneTypeName(ZoneType.ZoneTypeEnum.Jail), x, y)) // object is inside jail ); } Index: trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java =================================================================== --- trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 2008) +++ trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 2012) @@ -33,4 +33,5 @@ import java.util.WeakHashMap; import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; import java.util.logging.Level; import java.util.zip.GZIPInputStream; @@ -184,5 +185,6 @@ private static final String DELETE_SKILL_SAVE = "DELETE FROM character_skills_save WHERE char_obj_id=? AND class_index=?"; - private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, allyId, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, deleteclan, base_class, onlinetime FROM characters WHERE obj_id=?"; + private static final String UPDATE_CHARACTER = "UPDATE characters SET level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?,str=?,con=?,dex=?,_int=?,men=?,wit=?,face=?,hairStyle=?,hairColor=?,heading=?,x=?,y=?,z=?,exp=?,sp=?,karma=?,pvpkills=?,pkkills=?,rec_have=?,rec_left=?,clanid=?,maxload=?,race=?,classid=?,deletetime=?,title=?,allyId=?,accesslevel=?,online=?,clan_privs=?,wantspeace=?,deleteclan=?,base_class=?,onlinetime=?,in_jail=?,jail_timer=? WHERE obj_id=?"; + private static final String RESTORE_CHARACTER = "SELECT account_name, obj_Id, char_name, level, maxHp, curHp, maxCp, curCp, maxMp, curMp, acc, crit, evasion, mAtk, mDef, mSpd, pAtk, pDef, pSpd, runSpd, walkSpd, str, con, dex, _int, men, wit, face, hairStyle, hairColor, sex, heading, x, y, z, movement_multiplier, attack_speed_multiplier, colRad, colHeight, exp, sp, karma, pvpkills, pkkills, clanid, maxload, race, classid, deletetime, cancraft, title, allyId, rec_have, rec_left, accesslevel, online, char_slot, lastAccess, clan_privs, wantspeace, deleteclan, base_class, onlinetime, in_jail, jail_timer FROM characters WHERE obj_id=?"; private static final String RESTORE_CHAR_SUBCLASSES = "SELECT class_id,exp,sp,level,class_index FROM character_subclasses WHERE char_obj_id=? ORDER BY class_index ASC"; private static final String ADD_CHAR_SUBCLASS = "INSERT INTO character_subclasses (char_obj_id,class_id,exp,sp,level,class_index) VALUES (?,?,?,?,?,?)"; @@ -515,4 +517,7 @@ /** Store object used to summon the strider you are mounting **/ private int _mountObjectID = 0; + + private boolean _inJail = false; + private long _jailTimer = 0; /** Skill casting information (used to queue when several skills are cast in a short time) **/ @@ -3662,4 +3667,5 @@ stopWaterTask(); stopRentPet(); + stopJailTask(); } @@ -4439,4 +4445,7 @@ } + player.setInJail((rset.getInt("in_jail")==1)); + player.setJailTimer(rset.getLong("jail_timer")); + // Add the L2PcInstance object in _allObjects //L2World.getInstance().storeObject(player); @@ -4723,13 +4732,5 @@ // Update base class - statement = con.prepareStatement( - "UPDATE characters SET " + - "level=?,maxHp=?,curHp=?,maxCp=?,curCp=?,maxMp=?,curMp=?," + - "str=?,con=?,dex=?,_int=?,men=?,wit=?,face=?,hairStyle=?,hairColor=?," + - "heading=?,x=?,y=?,z=?,exp=?,sp=?,karma=?,pvpkills=?,pkkills=?," + - "rec_have=?,rec_left=?,clanid=?,maxload=?,race=?,classid=?,deletetime=?," + - "title=?,allyId=?,accesslevel=?,online=?,clan_privs=?,wantspeace=?,deleteclan=?," + - "base_class=?,onlinetime=? " + - "WHERE obj_id=?"); + statement = con.prepareStatement(UPDATE_CHARACTER); statement.setInt(1, level); statement.setInt(2, getMaxHp()); @@ -4784,6 +4785,8 @@ totalOnlineTime += (System.currentTimeMillis()-_onlineBeginTime)/1000; - statement.setLong(41, totalOnlineTime); - statement.setInt(42, getObjectId()); + statement.setLong(41, totalOnlineTime); + statement.setInt(42, isInJail() ? 1 : 0); + statement.setLong(43, getJailTimer()); + statement.setInt(44, getObjectId()); statement.execute(); @@ -7176,4 +7179,7 @@ } } + + // jail task + updateJailState(); if (getInvisible() == 1) @@ -7926,3 +7932,116 @@ _queuedSkill = new SkillDat(queuedSkill, ctrlPressed, shiftPressed); } + + public boolean isInJail() + { + return _inJail; + } + + public void setInJail(boolean state) + { + setInJail(state, 0); + } + public void setInJail(boolean state, int delayInMinutes) + { + _inJail = state; + _jailTimer = 0; + + if (_inJail) + { + if (delayInMinutes > 0) + { + _jailTimer = delayInMinutes * 60 * 1000; // in millisec + + // start the countdown + _jailTask = ThreadPoolManager.getInstance().scheduleGeneral(new JailTask(this), _jailTimer); + sendMessage("You are in jail for "+delayInMinutes+" minutes."); + } + + // Open a Html message to inform the player + NpcHtmlMessage htmlMsg = new NpcHtmlMessage(0); + String jailInfos = HtmCache.getInstance().getHtm("data/html/jail_in.htm"); + if (jailInfos != null) + htmlMsg.setHtml(jailInfos); + else + htmlMsg.setHtml("You have been put in jail by an admin."); + sendPacket(htmlMsg); + + teleToLocation(-114356, -249645, -2984); // Jail + } else + { + // Open a Html message to inform the player + NpcHtmlMessage htmlMsg = new NpcHtmlMessage(0); + String jailInfos = HtmCache.getInstance().getHtm("data/html/jail_out.htm"); + if (jailInfos != null) + htmlMsg.setHtml(jailInfos); + else + htmlMsg.setHtml("You are free for now, respect server rules!"); + sendPacket(htmlMsg); + + teleToLocation(17836, 170178, -3507); // Floran + } + + // store in database + storeCharBase(); + } + + public long getJailTimer() + { + return _jailTimer; + } + + public void setJailTimer(long time) + { + _jailTimer = time; + } + + private void updateJailState() + { + if (isInJail()) + { + // If jail time is elapsed, free the player + if (_jailTimer > 0) + { + // restart the countdown + _jailTask = ThreadPoolManager.getInstance().scheduleGeneral(new JailTask(this), _jailTimer); + } + + // If player escaped, put him back in jail + if (!ZoneManager.getInstance().checkIfInZone(ZoneType.getZoneTypeName(ZoneType.ZoneTypeEnum.Jail), this)) + teleToLocation(-114356,-249645,-2984); + } + } + + public void stopJailTask() + { + stopJailTask(true); + } + public void stopJailTask(boolean save) + { + if (_jailTask != null) + { + if (save) + setJailTimer(_jailTask.getDelay(TimeUnit.MILLISECONDS)); + _jailTask.cancel(false); + _jailTask = null; + } + } + + private ScheduledFuture _jailTask; + private class JailTask implements Runnable + { + L2PcInstance _player; + protected long _startedAt; + + protected JailTask(L2PcInstance player) + { + _player = player; + _startedAt = System.currentTimeMillis(); + } + + public void run() + { + _player.setInJail(false); + } + } } Index: trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/entity/ZoneType.java =================================================================== --- trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/entity/ZoneType.java (revision 1957) +++ trunk/L2_Gameserver/java/net/sf/l2j/gameserver/model/entity/ZoneType.java (revision 2012) @@ -33,5 +33,6 @@ Recharge, Damage, - Fishing + Fishing, + Jail } @@ -41,5 +42,5 @@ "Castle Defender Spawn", "Clan Hall", "Peace", "Siege Battlefield", "Town", "Town Spawn", "Underground", - "Water","No Landing","Recharge","Damage","Fishing" + "Water","No Landing","Recharge","Damage","Fishing", "Jail" }; Index: trunk/L2_Gameserver/java/net/sf/l2j/gameserver/util/IllegalPlayerAction.java =================================================================== --- trunk/L2_Gameserver/java/net/sf/l2j/gameserver/util/IllegalPlayerAction.java (revision 1891) +++ trunk/L2_Gameserver/java/net/sf/l2j/gameserver/util/IllegalPlayerAction.java (revision 2012) @@ -33,4 +33,5 @@ import java.util.logging.Logger; +import net.sf.l2j.Config; import net.sf.l2j.gameserver.GmListTable; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; @@ -45,7 +46,7 @@ private static Logger _logAudit = Logger.getLogger("audit"); - String message; - int punishment; - L2PcInstance actor; + String _message; + int _punishment; + L2PcInstance _actor; public static final int PUNISH_BROADCAST = 1; @@ -56,19 +57,19 @@ public IllegalPlayerAction(L2PcInstance actor, String message, int punishment) { - this.message = message; - this.punishment = punishment; - this.actor = actor; + this._message = message; + this._punishment = punishment; + this._actor = actor; switch(punishment) { case PUNISH_KICK: - actor.sendMessage("You are will be kicked for illegal action, GM informed"); + _actor.sendMessage("You are will be kicked for illegal action, GM informed"); break; case PUNISH_KICKBAN: - actor.sendMessage("You are banned for illegal action, GM informed"); + _actor.sendMessage("You are banned for illegal action, GM informed"); break; case PUNISH_JAIL: - actor.sendMessage("Illegal action performed!"); - actor.sendMessage("You will be teleported to GM Consultation Service area and jailed"); + _actor.sendMessage("Illegal action performed!"); + _actor.sendMessage("You will be teleported to GM Consultation Service area and jailed"); break; } @@ -77,27 +78,26 @@ public void run() { - LogRecord record = new LogRecord(Level.INFO, "AUDIT:" + message); + LogRecord record = new LogRecord(Level.INFO, "AUDIT:" + _message); record.setLoggerName("audit"); - record.setParameters(new Object[]{actor, punishment}); + record.setParameters(new Object[]{_actor, _punishment}); _logAudit.log(record); - GmListTable.broadcastMessageToGMs(message); + GmListTable.broadcastMessageToGMs(_message); - switch(punishment) + switch(_punishment) { case PUNISH_BROADCAST: return; case PUNISH_KICK: - actor.closeNetConnection(); + _actor.closeNetConnection(); break; case PUNISH_KICKBAN: - actor.setAccessLevel(-100); - actor.setAccountAccesslevel(-100); - actor.closeNetConnection(); + _actor.setAccessLevel(-100); + _actor.setAccountAccesslevel(-100); + _actor.closeNetConnection(); break; case PUNISH_JAIL: - actor.teleToLocation(-114356,-249645,-2984); - //TODO: update L2PcInstance with Jailed flag - // to prevent /escape from jail + _actor.setInJail(true, Config.DEFAULT_PUNISH_PARAM); + break; } }