Jump to content
  • 0

Ant Dual Box Por Pc


LucasDesigner

Question

Eu usei esse código e eu tentei adptar para l2jfrozen , mas eu tenho erros no servidor run fonte original.

 

 

Obs : quero deixa claro que o mod estar corrento na parte de copiliar .

mas tem um poblema que vc so pode logar 1 char se loga outro da erro

quem conseguir aprimora o erro que da no console do gameserver por favor

compartilha aqui o erro  Agradeço .

 

Ex : o mod foi criado para loga 2 conta por pc .

so que tem algum erro no mod porque quando voce

vai loga a segunda conta da um erro.

 

esse é o erro quem conseguir acha o erro e conseguir

ajeitar compartilhe com nos .

 

XxnYpRq.png

 

 

 

Index: config/protected/other.properties
===================================================================
--- config/protected/other.properties (revision 991)
+++ config/protected/other.properties (working copy)
@@ -39,6 +39,9 @@
AllowDualBoxInOly = False
AllowDualBoxInEvent = False

+# Multbox protection based on client tracert comparison
+MultiBoxesPerPC = 2
+
#=================================#
# Bot Protection #
#=================================#
Index: head-src/com/l2jfrozen/Config.java
===================================================================
--- head-src/com/l2jfrozen/Config.java (revision 991)
+++ head-src/com/l2jfrozen/Config.java (working copy)
@@ -608,7 +608,8 @@
public static String CHAT_FILTER_CHARS;
public static String CHAT_FILTER_PUNISHMENT;
public static ArrayList<String> FILTER_LIST = new ArrayList<String>();
-
+ public static int MAX_PLAYERS_FROM_ONE_PC;
+
public static int FS_TIME_ATTACK;
public static int FS_TIME_COOLDOWN;
public static int FS_TIME_ENTRY;
@@ -3445,7 +3446,7 @@
ALLOW_DUALBOX_EVENT = Boolean.parseBoolean(POtherSetting.getProperty("AllowDualBoxInEvent", "True"));
ALLOWED_BOXES = Integer.parseInt(POtherSetting.getProperty("AllowedBoxes", "99"));
ALLOW_DUALBOX = Boolean.parseBoolean(POtherSetting.getProperty("AllowDualBox", "True"));
-
+ MAX_PLAYERS_FROM_ONE_PC = Integer.parseInt(POtherSetting.getProperty("MultiboxesPerPC", "2"));
BOT_PROTECTOR = Boolean.parseBoolean(POtherSetting.getProperty("BotProtect", "False"));
BOT_PROTECTOR_FIRST_CHECK = Integer.parseInt(POtherSetting.getProperty("BotProtectFirstCheck", "15"));
BOT_PROTECTOR_NEXT_CHECK = Integer.parseInt(POtherSetting.getProperty("BotProtectNextCheck", "60"));
@@ -5323,6 +5324,7 @@
{
TVT_REVIVE_DELAY = Long.parseLong(pValue);
}
+ else if (pName.equalsIgnoreCase("MultiBoxesPerPC")) MAX_PLAYERS_FROM_ONE_PC = Integer.parseInt(pValue);
else if(pName.equalsIgnoreCase("MinKarma"))
{
KARMA_MIN_KARMA = Integer.parseInt(pValue);
Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 4348)
+++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -164,6 +164,7 @@
import com.l2jserver.gameserver.model.quest.State;
import com.l2jserver.gameserver.model.zone.type.L2BossZone;
import com.l2jserver.gameserver.network.L2GameClient;
+import com.l2jserver.gameserver.network.MultiBoxProtection;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
import com.l2jserver.gameserver.network.communityserver.writepackets.WorldInfo;
@@ -11964,6 +11965,19 @@
_log.log(Level.SEVERE, "deleteMe()", e);
}

+ try
+ {
+ if (Config.MAX_PLAYERS_FROM_ONE_PC > 0 && getClient() != null
+ && getClient().getAdress() != null && getClient().getTrace() != null)
+ {
+ MultiBoxProtection.getInstance().removeConnection(getClient());
+ }
+ }
+ catch (Exception e)
+ {
+ _log.log(Level.SEVERE, "deleteMe()", e);
+ }
+
// Close the connection with the client
closeNetConnection(closeClient);
Index: head-src/com/l2jfrozen/gameserver/network/L2GameClient.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/network/L2GameClient.java (revision 991)
+++ head-src/com/l2jfrozen/gameserver/network/L2GameClient.java (working copy)
@@ -93,6 +93,7 @@

// Info
public String accountName;
+ private String _adress;
public SessionKey sessionId;
public L2PcInstance activeChar;
private ReentrantLock _activeCharLock = new ReentrantLock();
@@ -110,7 +111,7 @@

// Crypt
public GameCrypt crypt;
-
+ private int[][] trace;
// Flood protection
public long packetsNextSendTick = 0;

@@ -130,6 +131,8 @@
public L2GameClient(MMOConnection<L2GameClient> con)
{
super(con);
+ if (con != null)
+ _adress = con.getInetAddress().getHostAddress();
state = GameClientState.CONNECTED;
_connectionstartTime = System.currentTimeMillis();
crypt = new GameCrypt();
@@ -233,6 +236,10 @@
return accountName;
}

+ public String getAdress()
+ {
+ return _adress;
+ }
public void setSessionId(SessionKey sk)
{
sessionId = sk;
@@ -973,8 +980,15 @@
//Decrease boxes number
if(player._active_boxes!=-1)
player.decreaseBoxes();
+ if (Config.MAX_PLAYERS_FROM_ONE_PC > 0)
+ {
+ MultiBoxProtection.getInstance().removeConnection(L2GameClient.this);
+ }
+ if (Config.MAX_PLAYERS_FROM_ONE_PC > 0 && !isDetached())
+ {
+ MultiBoxProtection.getInstance().removeConnection(L2GameClient.this);
+ }

-
if(!player.isKicked() && !Olympiad.getInstance().isRegistered(player)
&& !player.isInOlympiadMode()
&& !player.isInFunEvent()
@@ -1211,6 +1226,14 @@
_queueLock.unlock();
}
}
+ public void setClientTracert(int[][] tracert)
+ {
+ trace = tracert;
+ }
+ public int[][] getTrace()
+ {
+ return trace;
+ }

/**
* @return the _forcedToClose
Index: head-src/com/l2jfrozen/gameserver/network/MultiBoxProtection.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/network/MultiBoxProtection.java (revision 0)
+++ head-src/com/l2jfrozen/gameserver/network/MultiBoxProtection.java (revision 0)
@@ -0,0 +1,155 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jfrozen.gameserver.network;
+
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.logging.Logger;
+import com.l2jfrozen.Config;
+
+import javolution.util.FastMap;
+
+
+/**
+ * @author LucasDesigner
+ *
+ */
+public class MultiBoxProtection
+{
+ protected static final Logger _log = Logger.getLogger(MultiBoxProtection.class.getName());
+ private Map<IpPack, Integer> map;
+
+ public static MultiBoxProtection getInstance()
+ {
+ return SingletonHolder._instance;
+ }
+
+ public MultiBoxProtection()
+ {
+ map = new FastMap<MultiBoxProtection.IpPack, Integer>();
+ }
+
+ public synchronized boolean registerNewConnection(L2GameClient client)
+ {
+ IpPack pack = new IpPack(client.getAdress(), client.getTrace());
+ Integer count = map.get(pack);
+ if (count == null)
+ {
+ count = 1;
+ map.put(pack, count);
+ if (Config.DEVELOPER)
+ _log.info("MultiBoxProtection.registerNewConnection(): Set Count for: "+ client.getActiveChar().getName() +" (" + client.getAdress() + ") to " + count);
+ return true;
+ }
+ else if (count < Config.MAX_PLAYERS_FROM_ONE_PC)
+ {
+ count++;
+ map.put(pack, count);
+ if (Config.DEVELOPER)
+ _log.info("MultiBoxProtection.registerNewConnection(): Increase Count for: "+ client.getActiveChar().getName() +" (" + client.getAdress() + ") to " + count);
+ return true;
+ }
+ else
+ {
+ count++;
+ map.put(pack, count);
+ if (Config.DEVELOPER)
+ _log.info("MultiBoxProtection.registerNewConnection(): Count for: "+ client.getActiveChar().getName() +" (" + client.getAdress() + ") is " + count);
+ return false;
+ }
+
+ }
+
+ public synchronized void removeConnection(L2GameClient client)
+ {
+ if (client == null)
+ return;
+
+ IpPack pack = new IpPack(client.getAdress(), client.getTrace());
+ Integer count = map.get(pack);
+ if (count != null && count > 1)
+ {
+ count--;
+ map.put(pack, count);
+ if (Config.DEVELOPER)
+ _log.info("MultiBoxProtection.removeConnection(): Decrease Count for: "+ client.getActiveChar().getName() +" (" + client.getAdress() + ") to " + count);
+
+ }
+ else
+ {
+ map.remove(pack);
+ if (Config.DEVELOPER)
+ _log.info("MultiBoxProtection.removeConnection(): Remove Count for: "+ client.getActiveChar().getName() +" (" + client.getAdress() + ")");
+ }
+ }
+
+ @SuppressWarnings("synthetic-access")
+ private static class SingletonHolder
+ {
+ protected static final MultiBoxProtection _instance = new MultiBoxProtection();
+ }
+
+ public final static class IpPack
+ {
+ String ip;
+ int[][] tracert;
+
+ public IpPack(String ip, int[][] tracert)
+ {
+ this.ip = ip;
+ this.tracert = tracert;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((ip == null) ? 0 : ip.hashCode());
+ if(tracert == null)
+ return result;
+ for (int[] array: tracert)
+ result = prime * result + Arrays.hashCode(array);
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ IpPack other = (IpPack) obj;
+ if (ip == null)
+ {
+ if (other.ip != null)
+ return false;
+ }
+ else if (!ip.equals(other.ip))
+ return false;
+ for (int i = 0 ; i < tracert.length; i++)
+ for (int o = 0; o < tracert[0].length; o++)
+ if (tracert[i][o] != other.tracert[i][o])
+ return false;
+ return true;
+ }
+
+ }
+}
+
Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/EnterWorld.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/network/clientpackets/EnterWorld.java (revision 991)
+++ head-src/com/l2jfrozen/gameserver/network/clientpackets/EnterWorld.java (working copy)
@@ -68,6 +68,7 @@
import com.l2jfrozen.gameserver.model.entity.siege.Siege;
import com.l2jfrozen.gameserver.model.quest.Quest;
import com.l2jfrozen.gameserver.model.quest.QuestState;
+import com.l2jfrozen.gameserver.network.MultiBoxProtection;
import com.l2jfrozen.gameserver.network.Disconnection;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.ClientSetTime;
@@ -121,7 +122,7 @@
@Override
protected void runImpl()
{
- L2PcInstance activeChar = getClient().getActiveChar();
+ final L2PcInstance activeChar = getClient().getActiveChar();

if (activeChar == null)
{
@@ -422,6 +422,23 @@
activeChar.sendMessage("I'm sorry, but multibox is not allowed here.");
activeChar.logout();
}
+ if (Config.MAX_PLAYERS_FROM_ONE_PC > 0)
+ {
+ if (!MultiBoxProtection.getInstance().registerNewConnection(getClient()))
+ {
+ activeChar.sendMessage("Too many connections, please logout other characters first.");
+ if (Config.DEVELOPER)
+ _log.info("Too many conections, disconnecting " + activeChar.getName());
+ ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
+ {
+ public void run()
+ {
+ activeChar.logout(false);
+ }
+ }, 400);
+ return;
+ }
+ }

Hellows(activeChar);

Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java (revision 991)
+++ head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java (working copy)
@@ -25,11 +25,14 @@
import com.l2jfrozen.gameserver.communitybbs.Manager.RegionBBSManager;
import com.l2jfrozen.gameserver.datatables.SkillTable;
import com.l2jfrozen.gameserver.model.Inventory;
import com.l2jfrozen.gameserver.model.L2Party;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.entity.olympiad.Olympiad;
import com.l2jfrozen.gameserver.model.entity.sevensigns.SevenSignsFestival;
import com.l2jfrozen.gameserver.network.L2GameClient;
+import com.l2jfrozen.gameserver.network.MultiBoxProtection;
import com.l2jfrozen.gameserver.network.L2GameClient.GameClientState;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
@@ -177,7 +187,11 @@
}

L2GameClient client = getClient();
-
+
+ if (Config.MAX_PLAYERS_FROM_ONE_PC > 0)
+ {
+ MultiBoxProtection.getInstance().removeConnection(client);
+ }
// detach the client from the char so that the connection isnt closed in the deleteMe
player.setClient(null);

Link to comment
Share on other sites

6 answers to this question

Recommended Posts

  • 0

good share but l2j have something a bit better just look into their configs to check

 

# ---------------------------------------------------------------------------

# Dualbox Check

# ---------------------------------------------------------------------------

 

# Maximum number of players per IP address allowed to enter game.

# Default: 0 (unlimited)

DualboxCheckMaxPlayersPerIP = 0

 

# Maximum number of players per IP address allowed to participate in olympiad.

# Default: 0 (unlimited)

DualboxCheckMaxOlympiadParticipantsPerIP = 0

 

# Maximum number of players per IP address allowed to participate in events using L2J Event Engine (//event).

# Default: 0 (unlimited)

DualboxCheckMaxL2EventParticipantsPerIP = 0

 

# Whitelist of the addresses for dualbox checks.

# Format: Address1,Number1;Address2,Number2...

# Network address can be number (127.0.0.1) or symbolic (localhost) formats.

# Additional connection number added to the global limits for this address.

# For example, if number of TvT event participants per IP address set to the 1 (no dualbox)

# and whitelist contains "l2jserver.com,2" then number of allowed participants from l2jserver.com

# will be 1+2=3. Use 0 or negative value for unlimited number of connections.

# Default: 127.0.0.1,0 (no limits from localhost)

DualboxCheckWhitelist = 127.0.0.1,0

 

Also please use language thanks :)

Link to comment
Share on other sites

  • 0

It's not a share, he is asking for help to solve the errors from gs, I guess.

Moved to right section.

Edit your title and write in proper english, in order to receive any kind of help.

Link to comment
Share on other sites

  • 0

Eu usei esse código e eu tentei adptar para l2jfrozen , mas eu tenho erros no servidor run fonte original.

 

 

 

 

 

Index: config/protected/other.properties
===================================================================
--- config/protected/other.properties (revision 991)
+++ config/protected/other.properties (working copy)
@@ -39,6 +39,9 @@
AllowDualBoxInOly = False
AllowDualBoxInEvent = False

+# Multbox protection based on client tracert comparison
+MultiBoxesPerPC = 2
+
#=================================#
# Bot Protection #
#=================================#
Index: head-src/com/l2jfrozen/Config.java
===================================================================
--- head-src/com/l2jfrozen/Config.java (revision 991)
+++ head-src/com/l2jfrozen/Config.java (working copy)
@@ -608,7 +608,8 @@
public static String CHAT_FILTER_CHARS;
public static String CHAT_FILTER_PUNISHMENT;
public static ArrayList<String> FILTER_LIST = new ArrayList<String>();
-
+ public static int MAX_PLAYERS_FROM_ONE_PC;
+
public static int FS_TIME_ATTACK;
public static int FS_TIME_COOLDOWN;
public static int FS_TIME_ENTRY;
@@ -3445,7 +3446,7 @@
ALLOW_DUALBOX_EVENT = Boolean.parseBoolean(POtherSetting.getProperty("AllowDualBoxInEvent", "True"));
ALLOWED_BOXES = Integer.parseInt(POtherSetting.getProperty("AllowedBoxes", "99"));
ALLOW_DUALBOX = Boolean.parseBoolean(POtherSetting.getProperty("AllowDualBox", "True"));
-
+ MAX_PLAYERS_FROM_ONE_PC = Integer.parseInt(POtherSetting.getProperty("MultiboxesPerPC", "2"));
BOT_PROTECTOR = Boolean.parseBoolean(POtherSetting.getProperty("BotProtect", "False"));
BOT_PROTECTOR_FIRST_CHECK = Integer.parseInt(POtherSetting.getProperty("BotProtectFirstCheck", "15"));
BOT_PROTECTOR_NEXT_CHECK = Integer.parseInt(POtherSetting.getProperty("BotProtectNextCheck", "60"));
@@ -5323,6 +5324,7 @@
{
TVT_REVIVE_DELAY = Long.parseLong(pValue);
}
+ else if (pName.equalsIgnoreCase("MultiBoxesPerPC")) MAX_PLAYERS_FROM_ONE_PC = Integer.parseInt(pValue);
else if(pName.equalsIgnoreCase("MinKarma"))
{
KARMA_MIN_KARMA = Integer.parseInt(pValue);
Index: java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
===================================================================
--- java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (revision 4348)
+++ java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java (working copy)
@@ -164,6 +164,7 @@
import com.l2jserver.gameserver.model.quest.State;
import com.l2jserver.gameserver.model.zone.type.L2BossZone;
import com.l2jserver.gameserver.network.L2GameClient;
+import com.l2jserver.gameserver.network.MultiBoxProtection;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
import com.l2jserver.gameserver.network.communityserver.writepackets.WorldInfo;
@@ -11964,6 +11965,19 @@
_log.log(Level.SEVERE, "deleteMe()", e);
}

+ try
+ {
+ if (Config.MAX_PLAYERS_FROM_ONE_PC > 0 && getClient() != null
+ && getClient().getAdress() != null && getClient().getTrace() != null)
+ {
+ MultiBoxProtection.getInstance().removeConnection(getClient());
+ }
+ }
+ catch (Exception e)
+ {
+ _log.log(Level.SEVERE, "deleteMe()", e);
+ }
+
// Close the connection with the client
closeNetConnection(closeClient);
Index: head-src/com/l2jfrozen/gameserver/network/L2GameClient.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/network/L2GameClient.java (revision 991)
+++ head-src/com/l2jfrozen/gameserver/network/L2GameClient.java (working copy)
@@ -93,6 +93,7 @@

// Info
public String accountName;
+ private String _adress;
public SessionKey sessionId;
public L2PcInstance activeChar;
private ReentrantLock _activeCharLock = new ReentrantLock();
@@ -110,7 +111,7 @@

// Crypt
public GameCrypt crypt;
-
+ private int[][] trace;
// Flood protection
public long packetsNextSendTick = 0;

@@ -130,6 +131,8 @@
public L2GameClient(MMOConnection<L2GameClient> con)
{
super(con);
+ if (con != null)
+ _adress = con.getInetAddress().getHostAddress();
state = GameClientState.CONNECTED;
_connectionstartTime = System.currentTimeMillis();
crypt = new GameCrypt();
@@ -233,6 +236,10 @@
return accountName;
}

+ public String getAdress()
+ {
+ return _adress;
+ }
public void setSessionId(SessionKey sk)
{
sessionId = sk;
@@ -973,8 +980,15 @@
//Decrease boxes number
if(player._active_boxes!=-1)
player.decreaseBoxes();
+ if (Config.MAX_PLAYERS_FROM_ONE_PC > 0)
+ {
+ MultiBoxProtection.getInstance().removeConnection(L2GameClient.this);
+ }
+ if (Config.MAX_PLAYERS_FROM_ONE_PC > 0 && !isDetached())
+ {
+ MultiBoxProtection.getInstance().removeConnection(L2GameClient.this);
+ }

-
if(!player.isKicked() && !Olympiad.getInstance().isRegistered(player)
&& !player.isInOlympiadMode()
&& !player.isInFunEvent()
@@ -1211,6 +1226,14 @@
_queueLock.unlock();
}
}
+ public void setClientTracert(int[][] tracert)
+ {
+ trace = tracert;
+ }
+ public int[][] getTrace()
+ {
+ return trace;
+ }

/**
* @return the _forcedToClose
Index: head-src/com/l2jfrozen/gameserver/network/MultiBoxProtection.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/network/MultiBoxProtection.java (revision 0)
+++ head-src/com/l2jfrozen/gameserver/network/MultiBoxProtection.java (revision 0)
@@ -0,0 +1,155 @@
+/*
+ * This program is free software: you can redistribute it and/or modify it under
+ * the terms of the GNU General Public License as published by the Free Software
+ * Foundation, either version 3 of the License, or (at your option) any later
+ * version.
+ *
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
+ * details.
+ *
+ * You should have received a copy of the GNU General Public License along with
+ * this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+package com.l2jfrozen.gameserver.network;
+
+
+import java.util.Arrays;
+import java.util.Map;
+import java.util.logging.Logger;
+import com.l2jfrozen.Config;
+
+import javolution.util.FastMap;
+
+
+/**
+ * @author LucasDesigner
+ *
+ */
+public class MultiBoxProtection
+{
+ protected static final Logger _log = Logger.getLogger(MultiBoxProtection.class.getName());
+ private Map<IpPack, Integer> map;
+
+ public static MultiBoxProtection getInstance()
+ {
+ return SingletonHolder._instance;
+ }
+
+ public MultiBoxProtection()
+ {
+ map = new FastMap<MultiBoxProtection.IpPack, Integer>();
+ }
+
+ public synchronized boolean registerNewConnection(L2GameClient client)
+ {
+ IpPack pack = new IpPack(client.getAdress(), client.getTrace());
+ Integer count = map.get(pack);
+ if (count == null)
+ {
+ count = 1;
+ map.put(pack, count);
+ if (Config.DEVELOPER)
+ _log.info("MultiBoxProtection.registerNewConnection(): Set Count for: "+ client.getActiveChar().getName() +" (" + client.getAdress() + ") to " + count);
+ return true;
+ }
+ else if (count < Config.MAX_PLAYERS_FROM_ONE_PC)
+ {
+ count++;
+ map.put(pack, count);
+ if (Config.DEVELOPER)
+ _log.info("MultiBoxProtection.registerNewConnection(): Increase Count for: "+ client.getActiveChar().getName() +" (" + client.getAdress() + ") to " + count);
+ return true;
+ }
+ else
+ {
+ count++;
+ map.put(pack, count);
+ if (Config.DEVELOPER)
+ _log.info("MultiBoxProtection.registerNewConnection(): Count for: "+ client.getActiveChar().getName() +" (" + client.getAdress() + ") is " + count);
+ return false;
+ }
+
+ }
+
+ public synchronized void removeConnection(L2GameClient client)
+ {
+ if (client == null)
+ return;
+
+ IpPack pack = new IpPack(client.getAdress(), client.getTrace());
+ Integer count = map.get(pack);
+ if (count != null && count > 1)
+ {
+ count--;
+ map.put(pack, count);
+ if (Config.DEVELOPER)
+ _log.info("MultiBoxProtection.removeConnection(): Decrease Count for: "+ client.getActiveChar().getName() +" (" + client.getAdress() + ") to " + count);
+
+ }
+ else
+ {
+ map.remove(pack);
+ if (Config.DEVELOPER)
+ _log.info("MultiBoxProtection.removeConnection(): Remove Count for: "+ client.getActiveChar().getName() +" (" + client.getAdress() + ")");
+ }
+ }
+
+ @SuppressWarnings("synthetic-access")
+ private static class SingletonHolder
+ {
+ protected static final MultiBoxProtection _instance = new MultiBoxProtection();
+ }
+
+ public final static class IpPack
+ {
+ String ip;
+ int[][] tracert;
+
+ public IpPack(String ip, int[][] tracert)
+ {
+ this.ip = ip;
+ this.tracert = tracert;
+ }
+
+ @Override
+ public int hashCode()
+ {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((ip == null) ? 0 : ip.hashCode());
+ if(tracert == null)
+ return result;
+ for (int[] array: tracert)
+ result = prime * result + Arrays.hashCode(array);
+ return result;
+ }
+
+ @Override
+ public boolean equals(Object obj)
+ {
+ if (this == obj)
+ return true;
+ if (obj == null)
+ return false;
+ if (getClass() != obj.getClass())
+ return false;
+ IpPack other = (IpPack) obj;
+ if (ip == null)
+ {
+ if (other.ip != null)
+ return false;
+ }
+ else if (!ip.equals(other.ip))
+ return false;
+ for (int i = 0 ; i < tracert.length; i++)
+ for (int o = 0; o < tracert[0].length; o++)
+ if (tracert[i][o] != other.tracert[i][o])
+ return false;
+ return true;
+ }
+
+ }
+}
+
Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/EnterWorld.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/network/clientpackets/EnterWorld.java (revision 991)
+++ head-src/com/l2jfrozen/gameserver/network/clientpackets/EnterWorld.java (working copy)
@@ -68,6 +68,7 @@
import com.l2jfrozen.gameserver.model.entity.siege.Siege;
import com.l2jfrozen.gameserver.model.quest.Quest;
import com.l2jfrozen.gameserver.model.quest.QuestState;
+import com.l2jfrozen.gameserver.network.MultiBoxProtection;
import com.l2jfrozen.gameserver.network.Disconnection;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.ClientSetTime;
@@ -121,7 +122,7 @@
@Override
protected void runImpl()
{
- L2PcInstance activeChar = getClient().getActiveChar();
+ final L2PcInstance activeChar = getClient().getActiveChar();

if (activeChar == null)
{
@@ -422,6 +422,23 @@
activeChar.sendMessage("I'm sorry, but multibox is not allowed here.");
activeChar.logout();
}
+ if (Config.MAX_PLAYERS_FROM_ONE_PC > 0)
+ {
+ if (!MultiBoxProtection.getInstance().registerNewConnection(getClient()))
+ {
+ activeChar.sendMessage("Too many connections, please logout other characters first.");
+ if (Config.DEVELOPER)
+ _log.info("Too many conections, disconnecting " + activeChar.getName());
+ ThreadPoolManager.getInstance().scheduleGeneral(new Runnable()
+ {
+ public void run()
+ {
+ activeChar.logout(false);
+ }
+ }, 400);
+ return;
+ }
+ }

Hellows(activeChar);

Index: head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java
===================================================================
--- head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java (revision 991)
+++ head-src/com/l2jfrozen/gameserver/network/clientpackets/RequestRestart.java (working copy)
@@ -25,11 +25,14 @@
import com.l2jfrozen.gameserver.communitybbs.Manager.RegionBBSManager;
import com.l2jfrozen.gameserver.datatables.SkillTable;
import com.l2jfrozen.gameserver.model.Inventory;
import com.l2jfrozen.gameserver.model.L2Party;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.entity.olympiad.Olympiad;
import com.l2jfrozen.gameserver.model.entity.sevensigns.SevenSignsFestival;
import com.l2jfrozen.gameserver.network.L2GameClient;
+import com.l2jfrozen.gameserver.network.MultiBoxProtection;
import com.l2jfrozen.gameserver.network.L2GameClient.GameClientState;
import com.l2jfrozen.gameserver.network.SystemMessageId;
import com.l2jfrozen.gameserver.network.serverpackets.ActionFailed;
@@ -177,7 +187,11 @@
}

L2GameClient client = getClient();
-
+
+ if (Config.MAX_PLAYERS_FROM_ONE_PC > 0)
+ {
+ MultiBoxProtection.getInstance().removeConnection(client);
+ }
// detach the client from the char so that the connection isnt closed in the deleteMe
player.setClient(null);

 In Frozej with com.l2jserver imports? LOL, never be run.

Link to comment
Share on other sites

  • 0

good share but l2j have something a bit better just look into their configs to check

 

# ---------------------------------------------------------------------------

# Dualbox Check

# ---------------------------------------------------------------------------

 

# Maximum number of players per IP address allowed to enter game.

# Default: 0 (unlimited)

DualboxCheckMaxPlayersPerIP = 0

 

# Maximum number of players per IP address allowed to participate in olympiad.

# Default: 0 (unlimited)

DualboxCheckMaxOlympiadParticipantsPerIP = 0

 

# Maximum number of players per IP address allowed to participate in events using L2J Event Engine (//event).

# Default: 0 (unlimited)

DualboxCheckMaxL2EventParticipantsPerIP = 0

 

# Whitelist of the addresses for dualbox checks.

# Format: Address1,Number1;Address2,Number2...

# Network address can be number (127.0.0.1) or symbolic (localhost) formats.

# Additional connection number added to the global limits for this address.

# For example, if number of TvT event participants per IP address set to the 1 (no dualbox)

# and whitelist contains "l2jserver.com,2" then number of allowed participants from l2jserver.com

# will be 1+2=3. Use 0 or negative value for unlimited number of connections.

# Default: 127.0.0.1,0 (no limits from localhost)

DualboxCheckWhitelist = 127.0.0.1,0

 

Also please use language thanks :)

 

L2Jserver dualbox checker is PER IP! , and this code is PER PC.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Posts

    • Καλησπερα παιδια,παιζω τα ρεστα μου σε αυτο το θρεντ.Παλευω με ενα προβλημα περιπου 10 μερες.Προσπαθησα να κανω upgrade τα client files του interlude με αυτα ενως gracia final(apo files tou criticalerror)και οταν εκανα copy-paste τα αρχεια(animation/l2text/maps/staticmeshes/system/systemtextures/textures),το l2.exe σταματησε να δουλευει. Κατεβασα το engine.dll που δινεται σαν λυση στο συγκεκριμενο προβλημα αλλα δεν δουλεψε.Επειτα κατεβασα ενα ολοκληρο client(Celestine fix) και αυτο ανοιγει αλλα οταν προσπαθω να αλλαξω το l2.ini για να loggarw,τοτε δεν ανοιγει ξανα το l2.Στο task manager βλεπω ενα l2.exe. Για καποιο λογο νιωθω οτι μπορει να εγινε μαλακια με τα fonts.Δεν ειμαι σιγουρος γι αυτο. Τι δοκιμασα?   -Διαφορετικα L2 editors -Upgrade/downgrade drivers GPU -Uninstall+clean files απο 3-4 διαφορετικα αρχεια IL -Προφανως το engine.dll οπως λεω και παραπανω -Delete/hide asiahm-medium font -Run l2.exe με compatibility Vista/Xp/etc etc   Πριν φτασω στην τελευταια πιστα που ειναι το format,εχει καποιος ετσω και μια ιδεα γτ μπορει να brickare ετσι το συστημα?
    • Gift30 — is a promo code for a -30% discount on all fares. Have time to activate the promo code before 03.06.2023.   SELECT TARIFY   As a reminder, we are open to cooperation and ready to offer favourable conditions for bulk rates, as well as to make you the personalised rate you've been dreaming of for so long.    Kind regards, Proxy5 Team.
    • Good luck, i like Pride Style.
  • Topics

×
×
  • Create New...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock