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
{