Jump to content

Question

Posted

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);

6 answers to this question

Recommended Posts

  • 0
Posted

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 :)

  • 0
Posted

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.

  • 0
Posted

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.

  • 0
Posted

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.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

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.



×
×
  • Create New...