diff --git a/src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java b/src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
index 67dd5a2..84ae937 100644
--- a/src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
+++ b/src/main/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
@@ -411,6 +411,7 @@
private long _onlineBeginTime;
private long _lastAccess;
private long _uptime;
+ private int _ping = -1;
private final ReentrantLock _subclassLock = new ReentrantLock();
protected int _baseClass;
@@ -14350,4 +14351,14 @@
}
return _servitorShare.get(stat);
}
+
+ public int getPing()
+ {
+ return _ping;
+ }
+
+ public void setPing(int ping)
+ {
+ _ping = ping;
+ }
}
diff --git a/src/main/java/com/l2jserver/loginserver/network/Pinger.java b/src/main/java/com/l2jserver/loginserver/network/Pinger.java
new file mode 100644
index 0000000..bf16a6e
--- /dev/null
+++ b/src/main/java/com/l2jserver/loginserver/network/Pinger.java
@@ -0,0 +1,44 @@
+package com.l2jserver.loginserver.network;
+
+import com.l2jserver.gameserver.ThreadPoolManager;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.loginserver.network.serverpackets.NetPingPacket;
+
+/**
+ * @author vGodFather
+ */
+public class Pinger
+{
+ public static boolean getPing(L2PcInstance activeChar)
+ {
+ activeChar.sendMessage("Processing request...");
+ activeChar.sendPacket(new NetPingPacket(activeChar));
+ ThreadPoolManager.getInstance().scheduleGeneral(new AnswerTask(activeChar), 3000L);
+ return true;
+ }
+
+ private static final class AnswerTask implements Runnable
+ {
+ private final L2PcInstance _player;
+
+ public AnswerTask(L2PcInstance player)
+ {
+ _player = player;
+ }
+
+ @Override
+ public void run()
+ {
+ int ping = _player.getPing();
+ if (ping > -1)
+ {
+ _player.sendMessage("Current ping: " + ping + " ms.");
+ }
+ else
+ {
+ _player.sendMessage("The data from the client was not received.");
+ }
+ _player.setPing(-1);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/l2jserver/loginserver/network/serverpackets/NetPingPacket.java b/src/main/java/com/l2jserver/loginserver/network/serverpackets/NetPingPacket.java
new file mode 100644
index 0000000..30423f5
--- /dev/null
+++ b/src/main/java/com/l2jserver/loginserver/network/serverpackets/NetPingPacket.java
@@ -0,0 +1,24 @@
+package com.l2jserver.loginserver.network.serverpackets;
+
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.serverpackets.L2GameServerPacket;
+
+/**
+ * @author vGodFather
+ */
+public class NetPingPacket extends L2GameServerPacket
+{
+ private final int _objId;
+
+ public NetPingPacket(L2PcInstance cha)
+ {
+ _objId = cha.getObjectId();
+ }
+
+ @Override
+ protected void writeImpl()
+ {
+ writeC(0xD9);
+ writeD(_objId);
+ }
+}
\ No newline at end of file
diff --git a/dist/game/data/scripts/handlers/MasterHandler.java b/dist/game/data/scripts/handlers/MasterHandler.java
index cca1f18..6c72304 100644
--- a/dist/game/data/scripts/handlers/MasterHandler.java
+++ b/dist/game/data/scripts/handlers/MasterHandler.java
@@ -276,9 +276,11 @@
import handlers.voicedcommandhandlers.Banking;
import handlers.voicedcommandhandlers.ChangePassword;
import handlers.voicedcommandhandlers.ChatAdmin;
import handlers.voicedcommandhandlers.Debug;
import handlers.voicedcommandhandlers.GoToClanLeader;
import handlers.voicedcommandhandlers.Lang;
+import handlers.voicedcommandhandlers.PingVCmd;
import handlers.voicedcommandhandlers.StatsVCmd;
import handlers.voicedcommandhandlers.Wedding;
@@ -591,7 +593,9 @@
{
// Custom Handlers
CustomAnnouncePkPvP.class,
+ PingVCmd.class
}
};
@Override
diff --git a/dist/game/data/scripts/handlers/voicedcommandhandlers/PingVCmd.java b/dist/game/data/scripts/handlers/voicedcommandhandlers/PingVCmd.java
new file mode 100644
index 0000000..c9a2dbe
--- /dev/null
+++ b/dist/game/data/scripts/handlers/voicedcommandhandlers/PingVCmd.java
@@ -0,0 +1,29 @@
+package handlers.voicedcommandhandlers;
+
+import com.l2jserver.gameserver.handler.IVoicedCommandHandler;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.loginserver.network.Pinger;
+
+/**
+ * @author vGodFather
+ */
+public class PingVCmd implements IVoicedCommandHandler
+{
+ private static final String[] VOICED_COMMANDS =
+ {
+ "ping",
+ };
+
+ @Override
+ public boolean useVoicedCommand(String command, L2PcInstance activeChar, String target)
+ {
+ Pinger.getPing(activeChar);
+ return true;
+ }
+
+ @Override
+ public String[] getVoicedCommandList()
+ {
+ return VOICED_COMMANDS;
+ }
+}
\ No newline at end of file