/* * This file is part of the L2J Mobius project. * * 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 . */ package handlers.admincommandhandlers; import java.text.SimpleDateFormat; import java.util.Comparator; import java.util.Date; import java.util.List; import java.util.StringTokenizer; import java.util.stream.Collectors; import com.l2jmobius.gameserver.data.xml.impl.ClanHallData; import com.l2jmobius.gameserver.handler.IAdminCommandHandler; import com.l2jmobius.gameserver.model.L2Clan; import com.l2jmobius.gameserver.model.Location; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.entity.ClanHall; import com.l2jmobius.gameserver.model.html.PageBuilder; import com.l2jmobius.gameserver.model.html.PageResult; import com.l2jmobius.gameserver.model.html.formatters.BypassParserFormatter; import com.l2jmobius.gameserver.model.html.pagehandlers.NextPrevPageHandler; import com.l2jmobius.gameserver.model.html.styles.ButtonsStyle; import com.l2jmobius.gameserver.model.residences.ResidenceFunction; import com.l2jmobius.gameserver.network.SystemMessageId; import com.l2jmobius.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jmobius.gameserver.util.BypassParser; /** * Clan Hall admin commands. * @author St3eT */ public final class AdminClanHall implements IAdminCommandHandler { private static final String[] ADMIN_COMMANDS = { "admin_clanhall", }; @Override public boolean useAdminCommand(String command, L2PcInstance activeChar) { final StringTokenizer st = new StringTokenizer(command, " "); final String actualCommand = st.nextToken(); if (actualCommand.toLowerCase().equals("admin_clanhall")) { processBypass(activeChar, new BypassParser(command)); } return true; } private void doAction(L2PcInstance player, int clanHallId, String action, String actionVal) { final ClanHall clanHall = ClanHallData.getInstance().getClanHallById(clanHallId); if (clanHall != null) { switch (action) { case "openCloseDoors": { if (actionVal != null) { clanHall.openCloseDoors(Boolean.parseBoolean(actionVal)); } break; } case "teleport": { if (actionVal != null) { final Location loc; switch (actionVal) { case "inside": loc = clanHall.getOwnerLocation(); break; case "outside": loc = clanHall.getBanishLocation(); break; default: loc = player.getLocation(); } player.teleToLocation(loc); } break; } case "give": { if ((player.getTarget() != null) && (player.getTarget().getActingPlayer() != null)) { final L2Clan targetClan = player.getTarget().getActingPlayer().getClan(); if ((targetClan == null) || (targetClan.getHideoutId() != 0)) { player.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); } clanHall.setOwner(targetClan); } else { player.sendPacket(SystemMessageId.THAT_IS_AN_INCORRECT_TARGET); } break; } case "take": { final L2Clan clan = clanHall.getOwner(); if (clan != null) { clanHall.setOwner(null); } else { player.sendMessage("You cannot take Clan Hall which don't have any owner."); } break; } case "cancelFunc": { final ResidenceFunction function = clanHall.getFunction(Integer.parseInt(actionVal)); if (function != null) { clanHall.removeFunction(function); sendClanHallDetails(player, clanHallId); } break; } } } else { player.sendMessage("Clan Hall with id " + clanHallId + " does not exist!"); } useAdminCommand("admin_clanhall id=" + clanHallId, player); } private void sendClanHallList(L2PcInstance player, int page, BypassParser parser) { final NpcHtmlMessage html = new NpcHtmlMessage(0, 1); html.setFile(player.getHtmlPrefix(), "data/html/admin/clanhall_list.htm"); final List clanHallList = ClanHallData.getInstance().getClanHalls().stream().sorted(Comparator.comparingLong(ClanHall::getResidenceId)).collect(Collectors.toList()); //@formatter:off final PageResult result = PageBuilder.newBuilder(clanHallList, 4, "bypass -h admin_clanhall") .currentPage(page) .pageHandler(NextPrevPageHandler.INSTANCE) .formatter(BypassParserFormatter.INSTANCE) .style(ButtonsStyle.INSTANCE) .bodyHandler((pages, clanHall, sb) -> { sb.append(""); sb.append(""); sb.append("
&%" + clanHall.getResidenceId() + "; (" + clanHall.getResidenceId() + ")
"); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append("
Status:" + (clanHall.getOwner() == null ? "Free" : "Owned") + "
Location:&^" + clanHall.getResidenceId() + ";
Detailed Info:
"); sb.append("
"); }).build(); //@formatter:on html.replace("%pages%", result.getPages() > 0 ? "
" + result.getPagerTemplate() + "
" : ""); html.replace("%data%", result.getBodyTemplate().toString()); player.sendPacket(html); } private void sendClanHallDetails(L2PcInstance player, int clanHallId) { final ClanHall clanHall = ClanHallData.getInstance().getClanHallById(clanHallId); if (clanHall != null) { final NpcHtmlMessage html = new NpcHtmlMessage(0, 1); final StringBuilder sb = new StringBuilder(); html.setFile(player.getHtmlPrefix(), "data/html/admin/clanhall_detail.htm"); html.replace("%clanHallId%", clanHall.getResidenceId()); html.replace("%clanHallOwner%", (clanHall.getOwner() == null ? "Free" : "" + clanHall.getOwner().getName() + "")); final String grade = clanHall.getGrade().toString().replace("GRADE_", "") + " Grade"; html.replace("%clanHallGrade%", grade); html.replace("%clanHallSize%", clanHall.getGrade().getGradeValue()); if (!clanHall.getFunctions().isEmpty()) { sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append("
IDTypeLvlEnd dateAction
"); sb.append(""); clanHall.getFunctions().forEach(function -> { sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); }); sb.append("
" + function.getId() + "" + function.getType().toString() + "" + function.getLevel() + "" + new SimpleDateFormat("dd/MM HH:mm").format(new Date(function.getExpiration())) + "
"); } else { sb.append("This Clan Hall doesn't have any Function yet."); } html.replace("%functionList%", sb.toString()); player.sendPacket(html); } else { player.sendMessage("Clan Hall with id " + clanHallId + " does not exist!"); useAdminCommand("admin_clanhall", player); } } private void processBypass(L2PcInstance player, BypassParser parser) { final int page = parser.getInt("page", 0); final int clanHallId = parser.getInt("id", 0); final String action = parser.getString("action", null); final String actionVal = parser.getString("actionVal", null); if ((clanHallId > 0) && (action != null)) { doAction(player, clanHallId, action, actionVal); } else if (clanHallId > 0) { sendClanHallDetails(player, clanHallId); } else { sendClanHallList(player, page, parser); } } @Override public String[] getAdminCommandList() { return ADMIN_COMMANDS; } }