AdminClan.java 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233
  1. /*
  2. * This program is free software: you can redistribute it and/or modify it under
  3. * the terms of the GNU General Public License as published by the Free Software
  4. * Foundation, either version 3 of the License, or (at your option) any later
  5. * version.
  6. *
  7. * This program is distributed in the hope that it will be useful, but WITHOUT
  8. * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  9. * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  10. * details.
  11. *
  12. * You should have received a copy of the GNU General Public License along with
  13. * this program. If not, see <http://www.gnu.org/licenses/>.
  14. */
  15. package handlers.admincommandhandlers;
  16. import java.sql.Connection;
  17. import java.sql.PreparedStatement;
  18. import java.util.StringTokenizer;
  19. import com.l2jserver.L2DatabaseFactory;
  20. import com.l2jserver.gameserver.cache.HtmCache;
  21. import com.l2jserver.gameserver.handler.IAdminCommandHandler;
  22. import com.l2jserver.gameserver.instancemanager.CastleManager;
  23. import com.l2jserver.gameserver.instancemanager.ClanHallManager;
  24. import com.l2jserver.gameserver.instancemanager.FortManager;
  25. import com.l2jserver.gameserver.instancemanager.SiegeManager;
  26. import com.l2jserver.gameserver.model.L2Clan;
  27. import com.l2jserver.gameserver.model.L2ClanMember;
  28. import com.l2jserver.gameserver.model.L2Object;
  29. import com.l2jserver.gameserver.model.L2World;
  30. import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
  31. import com.l2jserver.gameserver.network.SystemMessageId;
  32. import com.l2jserver.gameserver.network.communityserver.CommunityServerThread;
  33. import com.l2jserver.gameserver.network.communityserver.writepackets.WorldInfo;
  34. import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
  35. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  36. import com.l2jserver.gameserver.util.Util;
  37. /**
  38. * @author UnAfraid, Zoey76
  39. */
  40. public class AdminClan implements IAdminCommandHandler
  41. {
  42. private static final String[] ADMIN_COMMANDS =
  43. {
  44. "admin_clan_info",
  45. "admin_clan_changeleader"
  46. };
  47. @Override
  48. public boolean useAdminCommand(String command, L2PcInstance activeChar)
  49. {
  50. final StringTokenizer st = new StringTokenizer(command, " ");
  51. final String cmd = st.nextToken();
  52. if (cmd.startsWith("admin_clan_info"))
  53. {
  54. String val;
  55. L2PcInstance player = null;
  56. if (st.hasMoreTokens())
  57. {
  58. val = st.nextToken();
  59. // From the HTML we receive player's object Id.
  60. if (Util.isDigit(val))
  61. {
  62. player = L2World.getInstance().getPlayer(Integer.parseInt(val));
  63. if (player == null)
  64. {
  65. activeChar.sendPacket(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME);
  66. return false;
  67. }
  68. }
  69. else
  70. {
  71. player = L2World.getInstance().getPlayer(val);
  72. if (player == null)
  73. {
  74. activeChar.sendPacket(SystemMessageId.INCORRECT_NAME_TRY_AGAIN);
  75. return false;
  76. }
  77. }
  78. }
  79. else
  80. {
  81. L2Object targetObj = activeChar.getTarget();
  82. if (targetObj instanceof L2PcInstance)
  83. {
  84. player = targetObj.getActingPlayer();
  85. }
  86. else
  87. {
  88. activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
  89. return false;
  90. }
  91. }
  92. final L2Clan clan = player.getClan();
  93. if (clan == null)
  94. {
  95. activeChar.sendPacket(SystemMessageId.TARGET_MUST_BE_IN_CLAN);
  96. return false;
  97. }
  98. final NpcHtmlMessage html = new NpcHtmlMessage(0);
  99. final String htm = HtmCache.getInstance().getHtm(activeChar.getHtmlPrefix(), "data/html/admin/claninfo.htm");
  100. html.setHtml(htm.toString());
  101. html.replace("%clan_name%", clan.getName());
  102. html.replace("%clan_leader%", clan.getLeaderName());
  103. html.replace("%clan_level%", String.valueOf(clan.getLevel()));
  104. html.replace("%clan_has_castle%", clan.getCastleId() > 0 ? CastleManager.getInstance().getCastleById(clan.getCastleId()).getName() : "No");
  105. html.replace("%clan_has_clanhall%", clan.getHideoutId() > 0 ? ClanHallManager.getInstance().getClanHallById(clan.getHideoutId()).getName() : "No");
  106. html.replace("%clan_has_fortress%", clan.getFortId() > 0 ? FortManager.getInstance().getFortById(clan.getFortId()).getName() : "No");
  107. html.replace("%clan_points%", String.valueOf(clan.getReputationScore()));
  108. html.replace("%clan_players_count%", String.valueOf(clan.getMembersCount()));
  109. html.replace("%clan_ally%", clan.getAllyId() > 0 ? clan.getAllyName() : "Not in ally");
  110. html.replace("%current_player_objectId%", String.valueOf(player.getObjectId()));
  111. html.replace("%current_player_name%", player.getName());
  112. activeChar.sendPacket(html);
  113. }
  114. else if (cmd.startsWith("admin_clan_changeleader"))
  115. {
  116. String val;
  117. L2PcInstance player = null;
  118. if (st.hasMoreTokens())
  119. {
  120. val = st.nextToken();
  121. // From the HTML we receive player's object Id.
  122. if (Util.isDigit(val))
  123. {
  124. player = L2World.getInstance().getPlayer(Integer.parseInt(val));
  125. if (player == null)
  126. {
  127. activeChar.sendPacket(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME);
  128. return false;
  129. }
  130. }
  131. else
  132. {
  133. player = L2World.getInstance().getPlayer(val);
  134. if (player == null)
  135. {
  136. activeChar.sendPacket(SystemMessageId.INCORRECT_NAME_TRY_AGAIN);
  137. return false;
  138. }
  139. }
  140. }
  141. else
  142. {
  143. L2Object targetObj = activeChar.getTarget();
  144. if (targetObj instanceof L2PcInstance)
  145. {
  146. player = targetObj.getActingPlayer();
  147. }
  148. else
  149. {
  150. activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
  151. return false;
  152. }
  153. }
  154. final L2Clan clan = player.getClan();
  155. if (clan == null)
  156. {
  157. activeChar.sendPacket(SystemMessageId.TARGET_MUST_BE_IN_CLAN);
  158. return false;
  159. }
  160. final L2ClanMember member = clan.getClanMember(player.getObjectId());
  161. if (member != null)
  162. {
  163. if ((clan.getLeader() != null) && (clan.getLeader().getPlayerInstance() != null))
  164. {
  165. final L2PcInstance exLeader = clan.getLeader().getPlayerInstance();
  166. SiegeManager.getInstance().removeSiegeSkills(exLeader);
  167. exLeader.setClan(clan);
  168. exLeader.setClanPrivileges(L2Clan.CP_NOTHING);
  169. exLeader.broadcastUserInfo();
  170. exLeader.setPledgeClass(L2ClanMember.calculatePledgeClass(exLeader));
  171. exLeader.broadcastUserInfo();
  172. exLeader.checkItemRestriction();
  173. }
  174. else if (clan.getLeaderId() > 0)
  175. {
  176. try (Connection con = L2DatabaseFactory.getInstance().getConnection())
  177. {
  178. PreparedStatement statement = con.prepareStatement("UPDATE characters SET clan_privs = ? WHERE charId = ?");
  179. statement.setInt(1, L2Clan.CP_NOTHING);
  180. statement.setInt(2, clan.getLeaderId());
  181. statement.execute();
  182. if (statement.getUpdateCount() == 0)
  183. {
  184. activeChar.sendPacket(SystemMessageId.ID_NOT_EXIST);
  185. }
  186. statement.close();
  187. }
  188. catch (Exception e)
  189. {
  190. activeChar.sendPacket(SystemMessageId.NOT_WORKING_PLEASE_TRY_AGAIN_LATER);
  191. }
  192. }
  193. clan.setLeader(member);
  194. clan.updateClanInDB();
  195. player.setClan(clan);
  196. player.setPledgeClass(L2ClanMember.calculatePledgeClass(player));
  197. player.setClanPrivileges(L2Clan.CP_ALL);
  198. if (clan.getLevel() >= SiegeManager.getInstance().getSiegeClanMinLevel())
  199. {
  200. SiegeManager.getInstance().addSiegeSkills(player);
  201. }
  202. player.broadcastUserInfo();
  203. clan.broadcastClanStatus();
  204. final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_LEADER_PRIVILEGES_HAVE_BEEN_TRANSFERRED_TO_C1);
  205. sm.addString(player.getName());
  206. clan.broadcastToOnlineMembers(sm);
  207. activeChar.sendPacket(sm);
  208. CommunityServerThread.getInstance().sendPacket(new WorldInfo(null, clan, WorldInfo.TYPE_UPDATE_CLAN_DATA));
  209. }
  210. }
  211. return true;
  212. }
  213. @Override
  214. public String[] getAdminCommandList()
  215. {
  216. return ADMIN_COMMANDS;
  217. }
  218. }