Sistema de Fake player con items y crest de clan. By madarismenos.
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;
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;
+ }
+}