Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

Ver chat de clan ajeno con Admin

Iniciado por Swarlog, Ago 19, 2022, 12:55 AM

Tema anterior - Siguiente tema

Swarlog

### Eclipse Workspace Patch 1.0
#P aCis_gameserver
Index: java/net/sf/l2j/gameserver/model/L2Clan.java
===================================================================
--- java/net/sf/l2j/gameserver/model/L2Clan.java        (revision 1)
+++ java/net/sf/l2j/gameserver/model/L2Clan.java        (working copy)
@@ -22,6 +22,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
@@ -64,6 +65,7 @@
        private int _clanId;
        private L2ClanMember _leader;
        private final Map<Integer, L2ClanMember> _members = new HashMap<>();
+    private final List<L2PcInstance> _watchers = new CopyOnWriteArrayList<>();
       
        private String _allyName;
        private int _allyId;
@@ -203,6 +205,21 @@
                _members.put(leader.getObjectId(), leader);
        }
       
+       public List<L2PcInstance> getWatchers()
+       {
+               return _watchers;
+       }
+     
+       public void addWatcher(L2PcInstance player)
+       {
+               _watchers.add(player);
+       }
+     
+       public void removeWatcher(L2PcInstance player)
+       {
+               _watchers.remove(player);
+       }
+     
        public void setNewLeader(L2ClanMember member)
        {
                if (!_leader.isOnline())
Index: java/net/sf/l2j/gameserver/handler/chathandlers/ChatClan.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/chathandlers/ChatClan.java       (revision 1)
+++ java/net/sf/l2j/gameserver/handler/chathandlers/ChatClan.java       (working copy)
@@ -38,8 +38,15 @@
        {
                if (activeChar.getClan() != null)
                {
-                       CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
+                       CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text); 
                        activeChar.getClan().broadcastToOnlineMembers(cs);
+                     
+                       if(!activeChar.getClan().getWatchers().isEmpty())
+                       {
+                               cs = new CreatureSay(activeChar.getObjectId(), type, "[Clan:"+activeChar.getClan().getName()+"]"+activeChar.getName(), text);
+                               for(L2PcInstance watcher : activeChar.getClan().getWatchers())
+                                       watcher.sendPacket(cs);
+                       }
                }
        }
       
Index: java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java (revision 1)
+++ java/net/sf/l2j/gameserver/handler/AdminCommandHandler.java (working copy)
@@ -66,6 +66,7 @@
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTarget;
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminTeleport;
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminUnblockIp;
+import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminWatchClan;
 import net.sf.l2j.gameserver.handler.admincommandhandlers.AdminZone;
 
 public class AdminCommandHandler
@@ -98,6 +99,7 @@
                registerAdminCommandHandler(new AdminEffects());
                registerAdminCommandHandler(new AdminEnchant());
                registerAdminCommandHandler(new AdminExpSp());
+               registerAdminCommandHandler(new AdminWatchClan());
                registerAdminCommandHandler(new AdminGeodata());
                registerAdminCommandHandler(new AdminGm());
                registerAdminCommandHandler(new AdminGmChat());
Index: java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminWatchClan.java
===================================================================
--- java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminWatchClan.java (revision 0)
+++ java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminWatchClan.java (revision 0)
@@ -0,0 +1,86 @@
+/*
+ * 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 net.sf.l2j.gameserver.handler.admincommandhandlers;
+
+import net.sf.l2j.gameserver.datatables.ClanTable;
+import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
+import net.sf.l2j.gameserver.model.L2Clan;
+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
+
+/**
+ * @author Lioy
+ *
+ */
+public class AdminWatchClan implements IAdminCommandHandler
+{
+       private static final String[] ADMIN_COMMANDS =
+       {
+               "admin_watchclan",
+               "admin_stopwatch",
+       };
+     
+       @Override
+       public boolean useAdminCommand(String command, L2PcInstance activeChar)
+       {
+               if(command.startsWith(ADMIN_COMMANDS[0]) || command.startsWith(ADMIN_COMMANDS[1]))
+               {
+                       L2Clan clan;
+                       String clanName;
+                       try
+                       {
+                                clanName = command.substring(16);
+                                clan = ClanTable.getInstance().getClanByName(clanName);
+                       }
+                       catch(Exception e)
+                       {
+                               activeChar.sendMessage("Incorrect clan name. Usage: //watchclan <clanname>");
+                               return false;
+                       }
+                     
+                       if(command.startsWith(ADMIN_COMMANDS[0]))
+                       {
+                             
+                               if(clan.getWatchers().contains(activeChar))
+                               {
+                                       activeChar.sendMessage("You already watch "+clanName +" clan.");
+                                       return false;
+                               }
+                             
+                               clan.addWatcher(activeChar);
+                               activeChar.sendMessage("You are now a watcher in "+clanName +" clan.");
+                       }
+                     
+                       else if(command.startsWith(ADMIN_COMMANDS[1]))
+                       {
+                               if(!clan.getWatchers().contains(activeChar))
+                               {
+                                       activeChar.sendMessage("You don't watch even "+clanName +" clan.");
+                                       return false;
+                               }
+                             
+                               clan.removeWatcher(activeChar);
+                               activeChar.sendMessage("You are not a watcher anymore in "+clanName +" clan.");
+                       }
+               }
+               return true;
+       }
+
+       @Override
+       public String[] getAdminCommandList()
+       {
+               return ADMIN_COMMANDS;
+       }
+     
+}
Index: data/xml/admin_commands_rights.xml
===================================================================
--- data/xml/admin_commands_rights.xml  (revision 1)
+++ data/xml/admin_commands_rights.xml  (working copy)
@@ -14,6 +14,9 @@
        <aCar name="admin_tradeoff" accessLevel="1" />
        <aCar name="admin_reload" accessLevel="1" />
        <aCar name="admin_script_load" accessLevel="1" />
+     
+       <aCar name="admin_watchclan" accessLevel="1" />
+       <aCar name="admin_stopwatch" accessLevel="1" />
 
        <!-- ANNOUNCEMENTS -->
        <aCar name="admin_list_announcements" accessLevel="1" />

Información:
Permite que un administrador pueda ver la conversación de clan (@).
El administrador puede ver varios clanes a la vez.

Comando:
//watchclan clanname
//stopwatch clanname