Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Comando .ping

Iniciado por Swarlog, Jun 25, 2025, 09:51 PM

Tema anterior - Siguiente tema

Swarlog

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