rendered paste bodyIndex: net/sf/l2j/gameserver/clientpackets/Logout.java===================================================================--- net/sf/l2j/gameserver/clientpackets/Logout.java (revision 2309)+++ net/sf/l2j/gameserver/clientpackets/Logout.java (working copy)@@ -92,6 +92,13 @@ player.getParty().broadcastToPartyMembers(SystemMessage.sendString(player.getName() + " has been removed from the upcoming festival.")); } + if (player.isElixirAFK())+ {+ //calcul du gain d'xp en afk+ long gainXP = (player.getStat()).getExp() - player.getElixirXPAvantAFK();+ _log.info("[AFK] "+player.getName()+" n'est plus afk (deco) ("+gainXP+" xp gagne).");+ player.setTitle(player.getElixirTitleAFK());+ } player.deleteMe(); //save character ClientThread.saveCharToDisk(player);Index: net/sf/l2j/gameserver/clientpackets/RequestRestart.java===================================================================--- net/sf/l2j/gameserver/clientpackets/RequestRestart.java (revision 2309)+++ net/sf/l2j/gameserver/clientpackets/RequestRestart.java (working copy)@@ -115,6 +115,13 @@ + " has been removed from the upcoming festival.")); } + if (player.isElixirAFK())+ {+ //calcul du gain d'xp en afk+ long gainXP = (player.getStat()).getExp() - player.getElixirXPAvantAFK();+ _log.info("[AFK] "+player.getName()+" n'est plus afk (restart) ("+gainXP+" xp gagne).");+ player.setTitle(player.getElixirTitleAFK());+ } player.deleteMe(); ClientThread.saveCharToDisk(getClient().getActiveChar()); Index: net/sf/l2j/gameserver/clientpackets/Say2.java===================================================================--- net/sf/l2j/gameserver/clientpackets/Say2.java (revision 2309)+++ net/sf/l2j/gameserver/clientpackets/Say2.java (working copy)@@ -217,30 +217,51 @@ } break; case ALL:- for (L2PcInstance player : activeChar.getKnownList().getKnownPlayers())- {- if (activeChar.isInsideRadius(player, 1250, false, true))- player.sendPacket(cs);- }- activeChar.sendPacket(cs);- +//elixir+ boolean elixirCommand=false; if (_text.startsWith(".")) { StringTokenizer st = new StringTokenizer(_text); String target = st.nextToken().substring(1);- - if (st.hasMoreTokens())+ //commande afk+ if (target.equals("afk")) {- String command = st.nextToken();- IVoicedCommandHandler vch = VoicedCommandHandler.getInstance().getVoicedCommandHandler(command);- + elixirCommand=true;+ IVoicedCommandHandler vch = VoicedCommandHandler.getInstance().getVoicedCommandHandler(target); if (vch != null) - vch.useVoicedCommand(command, activeChar, target);+ vch.useVoicedCommand(target, activeChar, activeChar.getName()); else- _log.warning("No handler registered for bypass '"+command+"'");+ _log.warning("commande AFK non trouvee !"); }+ else+ {+ //fin commande afk+ if (st.hasMoreTokens())+ {+ String command = st.nextToken();+ IVoicedCommandHandler vch = VoicedCommandHandler.getInstance().getVoicedCommandHandler(command);+ if (vch != null)+ {+ elixirCommand=true;+ vch.useVoicedCommand(command, activeChar, target);+ }+ else+ _log.warning("No handler registered for bypass '"+command+"'");+ }+ } }++ if (!elixirCommand)+ {+ for (L2PcInstance player : activeChar.getKnownList().getKnownPlayers())+ {+ if (activeChar.isInsideRadius(player, 1250, false, true))+ player.sendPacket(cs);+ }+ activeChar.sendPacket(cs);+ } break;+//fin elixir case CLAN: if (activeChar.getClan() != null) activeChar.getClan().broadcastToOnlineMembers(cs);Index: net/sf/l2j/gameserver/communitybbs/Manager/RegionBBSManager.java===================================================================--- net/sf/l2j/gameserver/communitybbs/Manager/RegionBBSManager.java (revision 2309)+++ net/sf/l2j/gameserver/communitybbs/Manager/RegionBBSManager.java (working copy)@@ -262,9 +262,20 @@ htmlCode.append("<td align=left valign=top FIXWIDTH=75><a action=\"bypass _bbsloc;playerinfo;" + player.getName() + "\">"); - if (player.isGM()) htmlCode.append("<font color=\"LEVEL\">" + player.getName()- + "</font>");- else htmlCode.append(player.getName());+ if (player.isGM())+ {+ if (player.isElixirAFK())+ htmlCode.append("<font color=\"LEVEL\">[AFK]" + player.getName()+ "</font>");+ else+ htmlCode.append("<font color=\"LEVEL\">" + player.getName()+ "</font>");+ }+ else+ {+ if (player.isElixirAFK())+ htmlCode.append("[AFK]"+player.getName());+ else+ htmlCode.append(player.getName());+ } htmlCode.append("</a></td>"); Index: net/sf/l2j/gameserver/GameServer.java===================================================================--- net/sf/l2j/gameserver/GameServer.java (revision 2309)+++ net/sf/l2j/gameserver/GameServer.java (working copy)@@ -147,6 +147,9 @@ import net.sf.l2j.gameserver.handler.usercommandhandlers.PartyInfo; import net.sf.l2j.gameserver.handler.usercommandhandlers.Time; import net.sf.l2j.gameserver.handler.voicedcommandhandlers.stats;+//elixir+import net.sf.l2j.gameserver.handler.voicedcommandhandlers.afk;+// import net.sf.l2j.gameserver.idfactory.IdFactory; import net.sf.l2j.gameserver.instancemanager.DayNightSpawnManager; import net.sf.l2j.gameserver.instancemanager.Manager;@@ -446,12 +449,14 @@ _userCommandHandler.registerUserCommandHandler(new Mount()); _userCommandHandler.registerUserCommandHandler(new PartyInfo()); _userCommandHandler.registerUserCommandHandler(new Time());- + _log.config("UserCommandHandler: Loaded " + _userCommandHandler.size() + " handlers."); _voicedCommandHandler = VoicedCommandHandler.getInstance(); _voicedCommandHandler.registerVoicedCommandHandler(new stats());- + //elixir+ _voicedCommandHandler.registerVoicedCommandHandler(new afk());+ // _log.config("VoicedCommandHandler: Loaded " + _voicedCommandHandler.size() + " handlers."); TaskManager.getInstance();Index: net/sf/l2j/gameserver/handler/voicedcommandhandlers/afk.java===================================================================--- net/sf/l2j/gameserver/handler/voicedcommandhandlers/afk.java (revision 0)+++ net/sf/l2j/gameserver/handler/voicedcommandhandlers/afk.java (revision 0)@@ -0,0 +1,93 @@+/*++COMMANDE AFK++=>+++ */+package net.sf.l2j.gameserver.handler.voicedcommandhandlers;++import java.util.Iterator;+import java.util.logging.Level;+import java.util.logging.LogRecord;+import java.util.logging.Logger;++import javolution.lang.TextBuilder;++import net.sf.l2j.gameserver.handler.IVoicedCommandHandler;+import net.sf.l2j.gameserver.model.L2World;+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;+import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage;+import net.sf.l2j.gameserver.serverpackets.SystemMessage;++/**+ * + *+ */+public class afk implements IVoicedCommandHandler+{+ private static String[] _voicedCommands = { "afk" }; + private static Logger _log = Logger.getLogger(afk.class.getName());++ public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target)+ {+ if (command.equalsIgnoreCase("afk"))+ {+ L2PcInstance pc = L2World.getInstance().getPlayer(target);+ if(pc!=null)+ {+ if (pc.isElixirAFK()) //perso est afk+ {+ //calcul du gain d'xp en afk+ long gainXP = (pc.getStat()).getExp() - pc.getElixirXPAvantAFK();+ _log.info("[AFK] "+target+" n'est plus afk ("+gainXP+" xp gagne).");+ //restaureation du titre du perso+ pc.setTitle(pc.getElixirTitleAFK());+ pc.setElixirTitleAFK("");+ //dblocage du perso+ pc.setIsImobilised(false);+ //pc.setIsFakeDeath(false);+ pc.setElixirAFK(false);+ pc.enableAllSkills();+ pc.standUp();+ //maj du perso IG+ pc.broadcastUserInfo();+ //message systeme+ SystemMessage sm = new SystemMessage(SystemMessage.S1_S2);+ sm.addString("Vous n'etes plus AFK.");+ activeChar.sendPacket(sm);+ }+ else //perso non afk+ {+ _log.info("[AFK] "+target+" est afk.");+ //sauvegarde de l'xp actuel+ pc.setElixirXPAvantAFK((long)(pc.getStat()).getExp());+ //blocage du perso+ pc.setElixirAFK(true);+ pc.sitDown();+ //pc.setIsFakeDeath(true);+ pc.disableAllSkills();+ pc.setIsImobilised(true);+ //sauvegarde et changement du titre+ pc.setElixirTitleAFK(pc.getTitle());+ pc.setTitle("AFK");+ //maj du perso IG+ pc.broadcastUserInfo();+ //message systeme+ SystemMessage sm = new SystemMessage(SystemMessage.S1_S2);+ sm.addString("Vous etes AFK.");+ activeChar.sendPacket(sm);+ }+ }+ }+ return true;+ }++ + public String[] getVoicedCommandList()+ {+ return _voicedCommands;+ }++}Index: net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java===================================================================--- net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (revision 2309)+++ net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (working copy)@@ -536,6 +536,11 @@ /** Flag to disable equipment/skills while wearing formal wear **/ private boolean _IsWearingFormalWear = false; +//elixir+ private boolean _elixirAFK = false;+ private long _elixirXPAvantAFK = 0;+ private String _elixirTitleAFK;+// /** Skill casting information (used to queue when several skills are cast in a short time) **/ public class SkillDat@@ -8437,6 +8442,33 @@ } } +//elixir+ public void setElixirAFK (boolean afk)+ {+ _elixirAFK=afk;+ }+ public boolean isElixirAFK ()+ {+ return _elixirAFK;+ }+ public void setElixirXPAvantAFK (long xp)+ {+ _elixirXPAvantAFK=xp;+ }+ public long getElixirXPAvantAFK ()+ {+ return _elixirXPAvantAFK;+ }+ public void setElixirTitleAFK (String title)+ {+ _elixirTitleAFK=title;+ }+ public String getElixirTitleAFK ()+ {+ return _elixirTitleAFK;+ }+//+ private ScheduledFuture _jailTask; private class JailTask implements Runnable {