Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Fake Player Online + SQL

Iniciado por Swarlog, Sep 01, 2022, 12:37 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;
+ }
+}