diff --git a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminClan.java b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminClan.java index 864336c169e7438540a4aa0bf4a813379c63cb25..1c30e9aa8e10564ff0281a3bddc5629719d58f8e 100644 --- a/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminClan.java +++ b/L2J_DataPack_BETA/dist/game/data/scripts/handlers/admincommandhandlers/AdminClan.java @@ -14,9 +14,11 @@ */ package handlers.admincommandhandlers; -import java.util.NoSuchElementException; +import java.sql.Connection; +import java.sql.PreparedStatement; import java.util.StringTokenizer; +import com.l2jserver.L2DatabaseFactory; import com.l2jserver.gameserver.cache.HtmCache; import com.l2jserver.gameserver.handler.IAdminCommandHandler; import com.l2jserver.gameserver.instancemanager.CastleManager; @@ -25,6 +27,7 @@ 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.L2Object; import com.l2jserver.gameserver.model.L2World; import com.l2jserver.gameserver.model.actor.instance.L2PcInstance; import com.l2jserver.gameserver.network.SystemMessageId; @@ -32,160 +35,202 @@ 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; +import com.l2jserver.gameserver.util.Util; /** - * @author ThE_PuNiSHeR a.k.a UnAfraid + * @author UnAfraid, Zoey76 */ public class AdminClan implements IAdminCommandHandler { private static final String[] ADMIN_COMMANDS = { - "admin_clan_info", - "admin_clan_changeleader" + "admin_clan_info", "admin_clan_changeleader" }; + @Override public boolean useAdminCommand(String command, L2PcInstance activeChar) { - StringTokenizer st = new StringTokenizer(command, " "); - String cmd = st.nextToken(); + final StringTokenizer st = new StringTokenizer(command, " "); + final String cmd = st.nextToken(); if (cmd.startsWith("admin_clan_info")) { - try + String val; + L2PcInstance player = null; + if (st.hasMoreTokens()) { - int objectId = 0; - try - { - objectId = Integer.parseInt(st.nextToken()); - } - catch (NoSuchElementException NSEE) - { - objectId = activeChar.getTargetId(); - } - L2PcInstance player = L2World.getInstance().getPlayer(objectId); - if (player != null) + val = st.nextToken(); + // From the HTML we receive player's object Id. + if (Util.isDigit(val)) { - L2Clan clan = player.getClan(); - if (clan != null) + player = L2World.getInstance().getPlayer(Integer.parseInt(val)); + if (player == 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(); - } - + activeChar.sendPacket(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME); + return false; } - else + } + else + { + player = L2World.getInstance().getPlayer(val); + if (player == null) { - activeChar.sendMessage("Clan not found."); + activeChar.sendPacket(SystemMessageId.INCORRECT_NAME_TRY_AGAIN); return false; } } + } + else + { + L2Object targetObj = activeChar.getTarget(); + if (targetObj instanceof L2PcInstance) + { + player = targetObj.getActingPlayer(); + } else { - activeChar.sendMessage("Player is offline!"); + activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET); return false; } } - catch (NumberFormatException nfe) + + final L2Clan clan = player.getClan(); + if (clan == null) { - activeChar.sendMessage("This shouldn't happening"); + activeChar.sendPacket(SystemMessageId.TARGET_MUST_BE_IN_CLAN); return false; } - catch (Exception e) - { - e.printStackTrace(); - } + + final NpcHtmlMessage html = new NpcHtmlMessage(0); + final String htm = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/admin/claninfo.htm"); + html.setHtml(htm.toString()); + html.replace("%clan_name%", clan.getName()); + html.replace("%clan_leader%", clan.getLeaderName()); + html.replace("%clan_level%", String.valueOf(clan.getLevel())); + html.replace("%clan_has_castle%", clan.getHasCastle() > 0 ? CastleManager.getInstance().getCastleById(clan.getHasCastle()).getName() : "No"); + html.replace("%clan_has_clanhall%", clan.getHasHideout() > 0 ? ClanHallManager.getInstance().getClanHallById(clan.getHasHideout()).getName() : "No"); + html.replace("%clan_has_fortress%", clan.getHasFort() > 0 ? FortManager.getInstance().getFortById(clan.getHasFort()).getName() : "No"); + html.replace("%clan_points%", String.valueOf(clan.getReputationScore())); + html.replace("%clan_players_count%", String.valueOf(clan.getMembersCount())); + html.replace("%clan_ally%", clan.getAllyId() > 0 ? clan.getAllyName() : "Not in ally"); + html.replace("%current_player_objectId%", String.valueOf(player.getObjectId())); + html.replace("%current_player_name%", player.getName()); + activeChar.sendPacket(html); } else if (cmd.startsWith("admin_clan_changeleader")) { - try + String val; + L2PcInstance player = null; + if (st.hasMoreTokens()) { - int objectId = Integer.parseInt(st.nextToken()); - - L2PcInstance player = L2World.getInstance().getPlayer(objectId); - if (player != null) + val = st.nextToken(); + // From the HTML we receive player's object Id. + if (Util.isDigit(val)) { - L2Clan clan = player.getClan(); - if (clan == null) + player = L2World.getInstance().getPlayer(Integer.parseInt(val)); + if (player == null) { - activeChar.sendMessage("Player don't have clan"); + activeChar.sendPacket(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME); return false; } - for (L2ClanMember member : clan.getMembers()) + } + else + { + player = L2World.getInstance().getPlayer(val); + if (player == null) { - 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 = SystemMessage.getSystemMessage(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)); - } + activeChar.sendPacket(SystemMessageId.INCORRECT_NAME_TRY_AGAIN); + return false; } } + } + else + { + L2Object targetObj = activeChar.getTarget(); + if (targetObj instanceof L2PcInstance) + { + player = targetObj.getActingPlayer(); + } else { - activeChar.sendMessage("Player is offline"); + activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET); + return false; } } - catch (Exception e) + + final L2Clan clan = player.getClan(); + if (clan == null) { - e.printStackTrace(); + activeChar.sendPacket(SystemMessageId.TARGET_MUST_BE_IN_CLAN); + return false; + } + + final L2ClanMember member = clan.getClanMember(player.getObjectId()); + if (member != null) + { + if ((clan.getLeader() != null) && (clan.getLeader().getPlayerInstance() != null)) + { + final L2PcInstance exLeader = clan.getLeader().getPlayerInstance(); + 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 if (clan.getLeaderId() > 0) + { + Connection con = null; + try + { + con = L2DatabaseFactory.getInstance().getConnection(); + PreparedStatement statement = con.prepareStatement("UPDATE characters SET clan_privs = ? WHERE charId = ?"); + statement.setInt(1, L2Clan.CP_NOTHING); + statement.setInt(2, clan.getLeaderId()); + statement.execute(); + + if (statement.getUpdateCount() == 0) + { + activeChar.sendPacket(SystemMessageId.ID_NOT_EXIST); + } + statement.close(); + } + catch (Exception e) + { + activeChar.sendPacket(SystemMessageId.NOT_WORKING_PLEASE_TRY_AGAIN_LATER); + } + finally + { + L2DatabaseFactory.close(con); + } + } + + clan.setLeader(member); + clan.updateClanInDB(); + + player.setClan(clan); + player.setPledgeClass(member.calculatePledgeClass(player)); + player.setClanPrivileges(L2Clan.CP_ALL); + + if (clan.getLevel() >= SiegeManager.getInstance().getSiegeClanMinLevel()) + { + SiegeManager.getInstance().addSiegeSkills(player); + } + + player.broadcastUserInfo(); + clan.broadcastClanStatus(); + + final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_LEADER_PRIVILEGES_HAVE_BEEN_TRANSFERRED_TO_C1); + sm.addString(player.getName()); + clan.broadcastToOnlineMembers(sm); + activeChar.sendPacket(sm); + CommunityServerThread.getInstance().sendPacket(new WorldInfo(null, clan, WorldInfo.TYPE_UPDATE_CLAN_DATA)); } } - return true; } + @Override public String[] getAdminCommandList() { return ADMIN_COMMANDS;