Noticias:

No tienes permiso para ver los enlaces. Para poder verlos Registrate o Conectate.

Menú Principal

Clan Info and edit commands

Iniciado por Swarlog, Jun 25, 2025, 09:41 PM

Tema anterior - Siguiente tema

Swarlog

Index: sql/admin_command_access_rights.sql
===================================================================
--- sql/admin_command_access_rights.sql	(revision 41)
+++ sql/admin_command_access_rights.sql	(working copy)
@@ -573,4 +573,8 @@
 -- voice commands
 ('banchat','7'),
 ('unbanchat','7'),
-('debug','1');
\ No newline at end of file
+('debug','1'),
+
+-- admin clan info
+('admin_clan_info', '1'),
+('admin_clan_changeleader', '127');
\ No newline at end of file
Index: data/scripts/handlers/MasterHandler.java
===================================================================
--- data/scripts/handlers/MasterHandler.java	(revision 41)
+++ data/scripts/handlers/MasterHandler.java	(working copy)
@@ -38,6 +38,7 @@
 import handlers.admincommandhandlers.AdminCache;
 import handlers.admincommandhandlers.AdminCamera;
 import handlers.admincommandhandlers.AdminChangeAccessLevel;
+import handlers.admincommandhandlers.AdminClan;
 import handlers.admincommandhandlers.AdminCreateItem;
 import handlers.admincommandhandlers.AdminCursedWeapons;
 import handlers.admincommandhandlers.AdminDebug;
@@ -297,6 +298,7 @@
 		AdminCommandHandler.getInstance().registerAdminCommandHandler(new AdminCache());
 		AdminCommandHandler.getInstance().registerAdminCommandHandler(new AdminCamera());
 		AdminCommandHandler.getInstance().registerAdminCommandHandler(new AdminChangeAccessLevel());
+		AdminCommandHandler.getInstance().registerAdminCommandHandler(new AdminClan());
 		AdminCommandHandler.getInstance().registerAdminCommandHandler(new AdminCreateItem());
 		AdminCommandHandler.getInstance().registerAdminCommandHandler(new AdminCursedWeapons());
 		AdminCommandHandler.getInstance().registerAdminCommandHandler(new AdminDebug());
Index: data/scripts/handlers/admincommandhandlers/AdminEditChar.java
===================================================================
--- data/scripts/handlers/admincommandhandlers/AdminEditChar.java	(revision 41)
+++ data/scripts/handlers/admincommandhandlers/AdminEditChar.java	(working copy)
@@ -34,7 +34,6 @@
 import com.l2jserver.gameserver.communitybbs.Manager.RegionBBSManager;
 import com.l2jserver.gameserver.datatables.CharNameTable;
 import com.l2jserver.gameserver.datatables.CharTemplateTable;
-import com.l2jserver.gameserver.datatables.ClanTable;
 import com.l2jserver.gameserver.handler.IAdminCommandHandler;
 import com.l2jserver.gameserver.model.L2Object;
 import com.l2jserver.gameserver.model.L2World;
@@ -831,7 +830,7 @@
 		adminReply.setFile(activeChar.getHtmlPrefix(), "data/html/admin/" + filename);
 		adminReply.replace("%name%", player.getName());
 		adminReply.replace("%level%", String.valueOf(player.getLevel()));
-		adminReply.replace("%clan%", String.valueOf(ClanTable.getInstance().getClan(player.getClanId())));
+		adminReply.replace("%clan%", String.valueOf(player.getClan() != null ? "<a action=\"bypass -h admin_clan_info " + player.getObjectId() + "\">" + player.getClan().getName() + "</a>" : null));
 		adminReply.replace("%xp%", String.valueOf(player.getExp()));
 		adminReply.replace("%sp%", String.valueOf(player.getSp()));
 		adminReply.replace("%class%", player.getTemplate().className);
Index: data/scripts/handlers/admincommandhandlers/AdminClan.java
===================================================================
--- data/scripts/handlers/admincommandhandlers/AdminClan.java	(revision 0)
+++ data/scripts/handlers/admincommandhandlers/AdminClan.java	(revision 0)
@@ -0,0 +1,184 @@
+/*
+ * 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 handlers.admincommandhandlers;
+
+import java.util.StringTokenizer;
+
+import com.l2jserver.gameserver.cache.HtmCache;
+import com.l2jserver.gameserver.handler.IAdminCommandHandler;
+import com.l2jserver.gameserver.instancemanager.CastleManager;
+import com.l2jserver.gameserver.instancemanager.ClanHallManager;
+import com.l2jserver.gameserver.instancemanager.FortManager;
+import com.l2jserver.gameserver.instancemanager.SiegeManager;
+import com.l2jserver.gameserver.model.L2Clan;
+import com.l2jserver.gameserver.model.L2ClanMember;
+import com.l2jserver.gameserver.model.L2World;
+import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.network.SystemMessageId;
+import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
+import com.l2jserver.gameserver.network.communityserver.writepackets.WorldInfo;
+import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
+import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
+
+/**
+ * @author ThE_PuNiSHeR a.k.a UnAfraid
+ */
+public class AdminClan implements IAdminCommandHandler
+{
+	private static final String[] ADMIN_COMMANDS =
+	{
+		"admin_clan_info",
+		"admin_clan_changeleader"
+	};
+	
+	public boolean useAdminCommand(String command, L2PcInstance activeChar)
+	{
+		StringTokenizer st = new StringTokenizer(command, " ");
+		String cmd = st.nextToken();
+		if (cmd.startsWith("admin_clan_info"))
+		{
+			try
+			{
+				int objectId = Integer.parseInt(st.nextToken());
+				L2PcInstance player = L2World.getInstance().getPlayer(objectId);
+				if (player != null)
+				{
+					L2Clan clan = player.getClan();
+					if (clan != null)
+					{
+						try
+						{
+							NpcHtmlMessage msg = new NpcHtmlMessage(0);
+							String htm = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/admin/claninfo.htm");
+							msg.setHtml(htm.toString());
+							msg.replace("%clan_name%", clan.getName());
+							msg.replace("%clan_leader%", clan.getLeaderName());
+							msg.replace("%clan_level%", String.valueOf(clan.getLevel()));
+							msg.replace("%clan_has_castle%", clan.getHasCastle() > 0 ? CastleManager.getInstance().getCastleById(clan.getHasCastle()).getName() : "No");
+							msg.replace("%clan_has_clanhall%", clan.getHasHideout() > 0 ? ClanHallManager.getInstance().getClanHallById(clan.getHasHideout()).getName() : "No");
+							msg.replace("%clan_has_fortress%", clan.getHasFort() > 0 ? FortManager.getInstance().getFortById(clan.getHasFort()).getName() : "No");
+							msg.replace("%clan_points%", String.valueOf(clan.getReputationScore()));
+							msg.replace("%clan_players_count%", String.valueOf(clan.getMembersCount()));
+							msg.replace("%clan_ally%", clan.getAllyId() > 0 ? clan.getAllyName() : "Not in ally");
+							msg.replace("%current_player_objectId%", String.valueOf(objectId));
+							msg.replace("%current_player_name%", player.getName());
+							activeChar.sendPacket(msg);
+							
+						}
+						catch (NullPointerException npe)
+						{
+							npe.printStackTrace();
+						}
+						
+					}
+					else
+					{
+						activeChar.sendMessage("Clan not found.");
+						return false;
+					}
+				}
+				else
+				{
+					activeChar.sendMessage("Player is offline!");
+					return false;
+				}
+			}
+			catch (NumberFormatException nfe)
+			{
+				activeChar.sendMessage("This shouldn't happening");
+				return false;
+			}
+			catch (Exception e)
+			{
+				e.printStackTrace();
+			}
+		}
+		else if (cmd.startsWith("admin_clan_changeleader"))
+		{
+			try
+			{
+				int objectId = Integer.parseInt(st.nextToken());
+				
+				L2PcInstance player = L2World.getInstance().getPlayer(objectId);
+				if (player != null)
+				{
+					L2Clan clan = player.getClan();
+					if (clan == null)
+					{
+						activeChar.sendMessage("Player don't have clan");
+						return false;
+					}
+					for (L2ClanMember member : clan.getMembers())
+					{
+						if (member.getObjectId() == player.getObjectId())
+						{
+							L2PcInstance exLeader = clan.getLeader().getPlayerInstance();
+							if (exLeader != null)
+							{
+								SiegeManager.getInstance().removeSiegeSkills(exLeader);
+								exLeader.setClan(clan);
+								exLeader.setClanPrivileges(L2Clan.CP_NOTHING);
+								exLeader.broadcastUserInfo();
+								exLeader.setPledgeClass(exLeader.getClan().getClanMember(exLeader.getObjectId()).calculatePledgeClass(exLeader));
+								exLeader.broadcastUserInfo();
+								exLeader.checkItemRestriction();
+							}
+							else
+							{
+								// TODO: with query?
+							}
+							
+							clan.setLeader(member);
+							clan.updateClanInDB();
+							
+							L2PcInstance newLeader = member.getPlayerInstance();
+							newLeader.setClan(clan);
+							newLeader.setPledgeClass(member.calculatePledgeClass(newLeader));
+							newLeader.setClanPrivileges(L2Clan.CP_ALL);
+							
+							if (clan.getLevel() >= SiegeManager.getInstance().getSiegeClanMinLevel())
+								SiegeManager.getInstance().addSiegeSkills(newLeader);
+							
+							newLeader.broadcastUserInfo();
+							
+							clan.broadcastClanStatus();
+							
+							SystemMessage sm = new SystemMessage(SystemMessageId.CLAN_LEADER_PRIVILEGES_HAVE_BEEN_TRANSFERRED_TO_C1);
+							sm.addString(newLeader.getName());
+							clan.broadcastToOnlineMembers(sm);
+							activeChar.sendMessage("Clan leader has been changed!");
+							CommunityServerThread.getInstance().sendPacket(new WorldInfo(null, clan, WorldInfo.TYPE_UPDATE_CLAN_DATA));
+						}
+					}
+				}
+				else
+				{
+					activeChar.sendMessage("Player is offline");
+				}
+			}
+			catch (Exception e)
+			{
+				e.printStackTrace();
+			}
+		}
+		
+		return true;
+	}
+	
+	public String[] getAdminCommandList()
+	{
+		return ADMIN_COMMANDS;
+	}
+}
Index: data/html/admin/claninfo.htm
===================================================================
--- data/html/admin/claninfo.htm	(revision 0)
+++ data/html/admin/claninfo.htm	(revision 0)
@@ -0,0 +1,44 @@
+<html><title>Clan Information Panel: %clan_name%</title><body>
+<center>
+<table width=270>
+<tr>
+<td width=45><button value="Main" action="bypass -h admin_admin" width=45 height=21 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+<td width=180><center>Clan: %clan_name%</center></td>
+<td width=45><button value="Back" action="bypass -h admin_admin7" width=45 height=21 back="L2UI_ct1.button_df" fore="L2UI_ct1.button_df"></td>
+</tr>
+</table>
+<br>
+<br>
+<br>
+<table width=240 bgcolor="666666">
+<tr>
+<td>Clan Name:</td><td>%clan_name%</td>
+</tr>
+<tr>
+<td>Leader:</td><td>%clan_leader%</td>
+</tr>
+<tr>
+<td>Level:</td><td>%clan_level%</td>
+</tr>
+<tr>
+<td>Has Castle:</td><td>%clan_has_castle%</td>
+</tr>
+<tr>
+<td>Has Clan Hall:</td><td>%clan_has_clanhall%</td>
+</tr>
+<tr>
+<td>Has Fortress:</td><td>%clan_has_fortress%</td>
+</tr>
+<tr>
+<td>Rep. Points:</td><td>%clan_points%</td>
+</tr>
+<tr>
+<td>Players Count:</td><td>%clan_players_count%</td>
+</tr>
+<tr>
+<td>Ally :</td><td>%clan_ally%</td>
+</tr>
+<tr>
+<td>Change Leader:</td><td><a action="bypass -h admin_clan_changeleader %current_player_objectId%">%current_player_name%</a></td>
+</tr>
+</table>
\ No newline at end of file