Noticias:

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

Menú Principal

Fake Player Online + SQL

Iniciado por Swarlog, Ago 03, 2025, 01:03 AM

Tema anterior - Siguiente tema

Swarlog

CitarCORE:

Index: java/net/sf/l2j/gameserver/GameServer.java
===================================================================
--- java/net/sf/l2j/gameserver/GameServer.java	(revision 4)
+++ java/net/sf/l2j/gameserver/GameServer.java	(working copy)
@@ -99,6 +99,7 @@
 import net.sf.l2j.gameserver.instancemanager.games.MonsterRace;
 import net.sf.l2j.gameserver.model.L2Manor;
 import net.sf.l2j.gameserver.model.L2World;
+import net.sf.l2j.gameserver.model.entity.FakeOnline;
 import net.sf.l2j.gameserver.model.entity.Hero;
 import net.sf.l2j.gameserver.model.olympiad.Olympiad;
 import net.sf.l2j.gameserver.model.olympiad.OlympiadGameManager;
@@ -300,7 +301,7 @@
 		
 		if (Config.ALT_FISH_CHAMPIONSHIP_ENABLED)
 			FishingChampionshipManager.getInstance();
-		
+		FakeOnline.restoreFakePlayers();
 		Util.printSection("System");
 		TaskManager.getInstance();
 		Runtime.getRuntime().addShutdownHook(Shutdown.getInstance());
Index: java/net/sf/l2j/gameserver/model/L2Clan.java
===================================================================
--- java/net/sf/l2j/gameserver/model/L2Clan.java	(revision 4)
+++ java/net/sf/l2j/gameserver/model/L2Clan.java	(working copy)
@@ -2186,7 +2186,7 @@
 			member.broadcastUserInfo();
 	}
 	
-	private void checkCrests()
+	public void checkCrests()
 	{
 		if (_crestId != 0)
 		{
Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(revision 4)
+++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java	(working copy)
@@ -3118,7 +3118,7 @@
 		L2GameClient client = _client;
 		if (client != null)
 		{
-			if (client.isDetached())
+			if (client.isDetached()|| client.isFakePlayer())
 				client.cleanMe(true);
 			else
 			{
@@ -8890,6 +8890,17 @@
 		_validBypass2.add(bypass);
 	}
 	
+	public boolean fakeplayer = false;
+	
+	public boolean getfakeplayer()
+	{
+		return fakeplayer;
+	}
+	public void setfakeplayer(boolean fake)
+	{
+		fakeplayer = fake;
+	}
+	
 	public synchronized boolean validateBypass(String cmd)
 	{
 		for (String bp : _validBypass)
Index: java/net/sf/l2j/gameserver/model/entity/FakeOnline.java
===================================================================
--- java/net/sf/l2j/gameserver/model/entity/FakeOnline.java	(revision 0)
+++ java/net/sf/l2j/gameserver/model/entity/FakeOnline.java	(revision 0)
@@ -0,0 +1,92 @@
+package net.sf.l2j.gameserver.model.entity;
+
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import net.sf.l2j.L2DatabaseFactory;
+import net.sf.l2j.gameserver.LoginServerThread;
+import net.sf.l2j.gameserver.model.L2Clan;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+import net.sf.l2j.gameserver.model.itemcontainer.ItemContainer;
+import net.sf.l2j.gameserver.network.L2GameClient;
+import net.sf.l2j.gameserver.network.L2GameClient.GameClientState;
+
+/**
+ * @author FOFAS
+ *
+ */
+public class FakeOnline 
+{
+    private static Logger _log = Logger.getLogger(FakeOnline.class.getName());
+    //select fake player
+    private static final String LOAD_OFFLINE_STATUS = "SELECT * FROM fakeplayer";
+    //insert fake player
+    private static final String SET_OFFLINE_STATUS = "INSERT INTO fakeplayer (charId) VALUES (?)";
+
+    public static void restoreFakePlayers()
+    {
+            int nfakeplayer = 0;
+            try (Connection con = L2DatabaseFactory.getInstance().getConnection())
+            {
+                    PreparedStatement stm = con.prepareStatement(LOAD_OFFLINE_STATUS);
+                    ResultSet rs = stm.executeQuery();
+                    while (rs.next())
+                    {
+                            L2PcInstance player = null;
+                            try
+                            {
+                                    L2GameClient client = new L2GameClient(null);
+                                    client.setFakePlayer(true);
+                                    player = L2PcInstance.restore(rs.getInt("charId"));
+                                    client.setActiveChar(player);
+                                    player.setOnlineStatus(true, false);
+                                    client.setAccountName(player.getAccountName());
+                                    client.setState(GameClientState.IN_GAME);
+                                    player.setClient(client);
+                                    player.spawnMe(player.getX(), player.getY(), player.getZ());
+                                    LoginServerThread.getInstance().addGameServerLogin(player.getAccountName(), client);
+                                    ItemContainer items = player.getInventory();
+                                    items.restore();
+                                    L2Clan clan = player.getClan();
+                                    clan.checkCrests();
+                                    player.setfakeplayer(true);
+                                    player.setOnlineStatus(true, true);
+                                    player.restoreEffects();
+                                    player.broadcastUserInfo();
+                                    nfakeplayer++;
+                            }
+                            catch (Exception e)
+                            {
+                                    _log.log(Level.WARNING, "FakePlayer: Error loading trader: "+player,e);
+                                    if (player != null)
+                                    {
+                                       player.deleteMe();
+                                    }
+                            }
+                    }
+                    rs.close();
+                    stm.close();
+                    _log.info("Loaded: " +nfakeplayer+ " Fake player(s)");
+            }
+            catch (Exception e)
+            {
+                    _log.log(Level.WARNING, "FakePlayer: Error while loading FakePlayer: ",e);
+            }
+    }
+    
+    public static void setfakeplayers(L2PcInstance player)
+    {
+		try (Connection con = L2DatabaseFactory.getInstance().getConnection())
+		{
+			PreparedStatement statement = con.prepareStatement(SET_OFFLINE_STATUS);
+			statement.setInt(1, player.getObjectId());
+			statement.execute();
+			statement.close();
+		}
+		catch (Exception e)
+		{}
+    }
+}
Index: java/net/sf/l2j/gameserver/network/L2GameClient.java
===================================================================
--- java/net/sf/l2j/gameserver/network/L2GameClient.java	(revision 4)
+++ java/net/sf/l2j/gameserver/network/L2GameClient.java	(working copy)
@@ -194,7 +194,7 @@
 	
 	public void sendPacket(L2GameServerPacket gsp)
 	{
-		if (_isDetached)
+		if (_isDetached || _isfakeplayer)
 			return;
 		
 		getConnection().sendPacket(gsp);
@@ -291,6 +291,18 @@
 		}
 	}
 	
+	private boolean _isfakeplayer = false;
+	
+	public boolean isFakePlayer()
+	{
+		return _isfakeplayer;
+	}
+	
+	public void setFakePlayer(boolean b)
+	{
+		_isfakeplayer = b;
+	}
+	
 	public static void deleteCharByObjId(int objid)
 	{
 		if (objid < 0)
@@ -489,6 +501,9 @@
 	public void closeNow()
 	{
 		_isDetached = true; // prevents more packets execution
+		
+		_isfakeplayer = true;
+		
 		close(ServerClose.STATIC_PACKET);
 		synchronized (this)
 		{
@@ -538,7 +553,7 @@
 			
 			try
 			{
-				if (getActiveChar() != null && !isDetached())
+				if (getActiveChar() != null && !isDetached() || !isFakePlayer())
 				{
 					setDetached(true);
 					fast = !getActiveChar().isInCombat() && !getActiveChar().isLocked();
@@ -633,7 +648,7 @@
 	 */
 	public boolean dropPacket()
 	{
-		if (_isDetached) // detached clients can't receive any packets
+		if (_isDetached || _isfakeplayer) // detached clients can't receive any packets
 			return true;
 		
 		// flood protection
@@ -756,7 +771,7 @@
 				if (packet == null) // queue is empty
 					return;
 				
-				if (_isDetached) // clear queue immediately after detach
+				if (_isDetached || _isfakeplayer) // clear queue immediately after detach
 				{
 					_packetQueue.clear();
 					return;

CitarDATA:

Index: Roar_gameserver/java/com/l2jfresh/gameserver/handler/VoicedCommandHandler.java
===================================================================
--- Roar_gameserver/java/com/l2jfresh/gameserver/handler/VoicedCommandHandler.java	(revision 62)
+++ Roar_gameserver/java/com/l2jfresh/gameserver/handler/VoicedCommandHandler.java	(working copy)
@@ -22,6 +22,7 @@
 import com.l2jfresh.gameserver.handler.voicedcommandhandlers.BankingCmd;
 import com.l2jfresh.gameserver.handler.voicedcommandhandlers.DMVoicedInfo;
 import com.l2jfresh.gameserver.handler.voicedcommandhandlers.Donator;
+import com.l2jfresh.gameserver.handler.voicedcommandhandlers.FakePlayerOnline;
 import com.l2jfresh.gameserver.handler.voicedcommandhandlers.Leave;
 import com.l2jfresh.gameserver.handler.voicedcommandhandlers.OnlinePlayers;
 import com.l2jfresh.gameserver.handler.voicedcommandhandlers.Pin;
@@ -67,6 +68,7 @@
+	   registerHandler(new FakePlayerOnline());
 	}
 	
 	public void registerHandler(IVoicedCommandHandler handler)
Index: Roar_gameserver/java/com/l2jfresh/gameserver/handler/voicedcommandhandlers/FakePlayerOnline.java
===================================================================
--- Roar_gameserver/java/com/l2jfresh/gameserver/handler/voicedcommandhandlers/FakePlayerOnline.java	(revision 0)
+++ Roar_gameserver/java/com/l2jfresh/gameserver/handler/voicedcommandhandlers/FakePlayerOnline.java	(revision 0)
@@ -0,0 +1,35 @@
+package com.l2jfresh.gameserver.handler.voicedcommandhandlers;
+
+import com.l2jfresh.gameserver.handler.IVoicedCommandHandler;
+import com.l2jfresh.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jfresh.gameserver.model.custom.FakeOnline;
+
+/**
+ * @author FOFAS
+ *
+ */
+public class FakePlayerOnline  implements IVoicedCommandHandler
+{
+	private static final String[] VOICED_COMMANDS = {"fakeplayer"};
+	
+	@Override
+	public boolean useVoicedCommand(String command, L2PcInstance player, String target)
+	{
+		if (command.equalsIgnoreCase("fakeplayer"))
+		{
+            if (player != null)
+            {
+               FakeOnline.setfakeplayers(player);
+               player.setfakeplayer(true);
+               player.deleteMe();
+               player.logout();
+            }
+		}
+		return true;
+	}
+	@Override
+	public String[] getVoicedCommandList()
+	{
+		return VOICED_COMMANDS;
+	}
+}
Index: Roar_gameserver/java/com/l2jfresh/gameserver/handler/voicedcommandhandlers/FakePlayerOnline.java
===================================================================
--- Roar_gameserver/java/com/l2jfresh/gameserver/handler/voicedcommandhandlers/FakePlayerOnline.java	(revision 0)
+++ Roar_gameserver/java/com/l2jfresh/gameserver/handler/voicedcommandhandlers/FakePlayerOnline.java	(revision 0)
@@ -0,0 +1,35 @@
+package com.l2jfresh.gameserver.handler.voicedcommandhandlers;
+
+import com.l2jfresh.gameserver.handler.IVoicedCommandHandler;
+import com.l2jfresh.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jfresh.gameserver.model.custom.FakeOnline;
+
+/**
+ * @author FOFAS
+ *
+ */
+public class FakePlayerOnline  implements IVoicedCommandHandler
+{
+	private static final String[] VOICED_COMMANDS = {"fakeplayer"};
+	
+	@Override
+	public boolean useVoicedCommand(String command, L2PcInstance player, String target)
+	{
+		if (command.equalsIgnoreCase("fakeplayer"))
+		{
+            if (player != null)
+            {
+               FakeOnline.setfakeplayers(player);
+               player.setfakeplayer(true);
+               player.deleteMe();
+               player.logout();
+            }
+		}
+		return true;
+	}
+	@Override
+	public String[] getVoicedCommandList()
+	{
+		return VOICED_COMMANDS;
+	}
+}