Index: 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(""); - if (player.isGM()) htmlCode.append("" + player.getName() - + ""); - else htmlCode.append(player.getName()); + if (player.isGM()) + { + if (player.isElixirAFK()) + htmlCode.append("[AFK]" + player.getName()+ ""); + else + htmlCode.append("" + player.getName()+ ""); + } + else + { + if (player.isElixirAFK()) + htmlCode.append("[AFK]"+player.getName()); + else + htmlCode.append(player.getName()); + } htmlCode.append(""); 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 {