BETA PATCH RELEASED – GET READY!
Today we’re releasing the Beta Test Patch ⚙️
Make sure to update your client / launcher so you’re ready for the test.
During this beta you will have:
🛒Full access to all shops
🎉Full access to all events
🏆Olympiad enabled
This is your chance to:
Test all classes and setups
Check balance and report any issues
Explore all features freely before official launch
📦Downloads & Updates
Use our launcher to automatically update the full game and all files
Already have an Interlude client? Download and apply our patch
New players can download the full Interlude L2Mid client
⚔️
Get ready – the Open Beta starts on November 28 at 20:00 (GMT+2)!
https://l2mid.com/how-to-connect.php
If you find bugs or have suggestions, please post them in **🔧│suggestions.
Thanks for helping us improve the server – see you in-game! 🚀
Question
LucasDesigner
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);6 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now