You shouldn't use rev 382, not sure why everyone keep using that.
I don't make changesets for fun, I don't make new revisions for nothing.
Follow the revisions.
Mustang Service — not “just another service”
▪ We don’t just redraw documents — we reverse-engineer the system’s logic. And we do it beautifully.
▪ Mustang Service is for when you need more than a quick Photoshop touch-up — you need to pass verification at the edge of the impossible.
When you’re not looking for a template, but ordering a solution for your case.
› What we deliver in practice:
→ deep redraws with no traces of editing
→ an expert approach to verification algorithms
→ guides from people who actually do it — not rehashes of someone else’s manual
▪ With us you get not just a service — you get context.
We show how the system thinks, and how to navigate it.
▪ We work with those who value results, not excuses.
If you’re not with us yet — just take a look at what we publish.
Mustang Service — done right when everything else hasn’t worked.
› TG: @mustang_service ( https:// t.me/ mustang_service )
› Channel: Mustang Service ( https:// t.me/ +6RAKokIn5ItmYjEx )
#redraw #verification #documents #graphics #photoshop #kyc #MustangService
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