Secret Experience

Secret Experience (https://secretexperience.net/)
-   [Lineage] Java Mods (https://secretexperience.net/lineage-java-mods/)
-   -   [L2JServer] Admin Find Dualbox (https://secretexperience.net/lineage-java-mods/18353-admin-find-dualbox.html)

B1Z4R0 07-02-2010 10:09 AM

Admin Find Dualbox
 
Uso:
/ / find_dualbox - encontra IPs on-line com 2 ou mais chars
/ / find_dualbox 4 - encontra IPs on-line com 4 ou mais chars (basta alterar o número para o que você quiser)

Código:

Index: data/html/admin/dualbox.htm
===================================================================
--- data/html/admin/dualbox.htm        (revision 0)
+++ data/html/admin/dualbox.htm        (revision 0)
@@ -0,0 +1,13 @@
+<html><body>
+<table width=260><tr>
+<td width=40><button value="Main" action="bypass -h admin_admin" width=40 height=15 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+<td width=180><center>IPs with dualboxes (%multibox%): </center></td>
+<td width=40><button value="Back" action="bypass -h admin_show_characters 0" width=40 height=15 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+</tr></table>
+<br>
+%results%
+<br><br>
+<a action="bypass -h admin_find_dualbox 3\>Find dualbox with 3+ chars</a><br1>
+<a action="bypass -h admin_find_dualbox 4\>Find dualbox with 4+ chars</a><br1>
+<a action="bypass -h admin_find_dualbox 5\>Find dualbox with 5+ chars</a><br1>
+</body></html>
\ No newline at end of file
Index: data/scripts/handlers/admincommandhandlers/AdminEditChar.java
===================================================================
--- data/scripts/handlers/admincommandhandlers/AdminEditChar.java        (revision 6101)
+++ data/scripts/handlers/admincommandhandlers/AdminEditChar.java        (working copy)
@@ -16,7 +16,12 @@
 
 import java.sql.Connection;
 import java.sql.PreparedStatement;
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.StringTokenizer;
 import java.util.logging.Logger;
@@ -82,6 +87,7 @@
                "admin_find_character", //find a player by his name or a part of it (case-insensitive)
                "admin_find_ip", // find all the player connections from a given IPv4 number
                "admin_find_account", //list all the characters from an account (useful for GMs w/o DB access)
+                "admin_find_dualbox", //list all the IPs with more than 1 char logged in (dualbox)
                "admin_save_modifications", //consider it deprecated...
                "admin_rec", // gives recommendation points
                "admin_settitle", // changes char title
@@ -168,6 +174,19 @@
                                listCharacters(activeChar, 0);
                        }
                }
+                else if (command.startsWith("admin_find_dualbox"))
+                {
+                        int multibox = 2;
+                        try
+                        {
+                                String val = command.substring(19);
+                                multibox = Integer.parseInt(val);
+                        }
+                        catch (Exception e)
+                        {
+                        }
+                        findDualbox(activeChar, multibox);
+                }
                else if (command.equals("admin_edit_character"))
                        editCharacter(activeChar);
                // Karma control commands
@@ -552,13 +571,9 @@
                String account = "N/A";
                try
                {
-                        StringTokenizer clientinfo = new StringTokenizer(player.getClient().toString(), " ]:-[");
-                        clientinfo.nextToken();
-                        clientinfo.nextToken();
-                        clientinfo.nextToken();
-                        account = clientinfo.nextToken();
-                        clientinfo.nextToken();
-                        ip = clientinfo.nextToken();
+                        String clientInfo = player.getClient().toString();
+                        account = clientInfo.substring(clientInfo.indexOf("Account: ")+9, clientInfo.indexOf(" - IP: "));
+                        ip = clientInfo.substring(clientInfo.indexOf(" - IP: ")+7,clientInfo.lastIndexOf("]"));
                }
                catch (Exception e)
                {
@@ -896,4 +911,65 @@
                        throw new IllegalArgumentException("Malformed character name");
        }
       
+        /**
+        * @param activeChar
+        * @throws IllegalArgumentException
+        */
+        private void findDualbox(L2PcInstance activeChar, int multibox) throws IllegalArgumentException {
+                Collection<L2PcInstance> allPlayers = L2World.getInstance().getAllPlayers().values();
+                L2PcInstance[] players = allPlayers.toArray(new L2PcInstance[allPlayers.size()]);
+               
+                Map<String,List<L2PcInstance>> ipMap = new HashMap<String, List<L2PcInstance>>();
+               
+                String ip = "0.0.0.0";
+                L2GameClient client;
+               
+                final Map<String, Integer> dualboxIPs = new HashMap<String, Integer>();
+               
+                for (L2PcInstance player: players)
+                {
+                        client = player.getClient();
+                        if (client.isDetached())
+                        {
+                                continue;
+                        }
+                        else
+                        {
+                                ip = client.getConnection().getSocket().getInetAddress().getHostAddress();
+                                if (ipMap.get(ip) == null)
+                                        ipMap.put(ip, new ArrayList<L2PcInstance>());
+                                ipMap.get(ip).add(player);
+                               
+                                if (ipMap.get(ip).size() >= multibox)
+                                {
+                                        Integer count = dualboxIPs.get(ip);
+                                        if (count == null)
+                                                dualboxIPs.put(ip, 0);
+                                        else
+                                                dualboxIPs.put(ip, count+1);
+                                }
+                        }
+                }
+               
+                List<String> keys = new ArrayList<String>(dualboxIPs.keySet());
+                Collections.sort(keys, new Comparator<String>(){
+                        public int compare(String left, String right){
+                                return dualboxIPs.get(left).compareTo(dualboxIPs.get(right));
+                        }
+                });
+                Collections.reverse(keys);
+               
+                final StringBuilder results = new StringBuilder();
+                for (String dualboxIP : keys)
+                {
+                        StringUtil.append(results, "<a action=\"bypass -h admin_find_ip " + dualboxIP + "\">" + dualboxIP + " (" + dualboxIPs.get(dualboxIP) + "</a><br1>");
+                }
+               
+                NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
+                adminReply.setFile("data/html/admin/dualbox.htm");
+                adminReply.replace("%multibox%", String.valueOf(multibox));
+                adminReply.replace("%results%", results.toString());
+                activeChar.sendPacket(adminReply);
+        }
+       
 }

Sql
Código:

INSERT INTO `admin_command_access_rights` VALUES ('admin_find_dualbox','1');
Credits: janiii


Horários baseados na GMT -3. Agora são 08:45 AM.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.