/* * Copyright (C) 2004-2015 L2J Server * * This file is part of L2J Server. * * L2J Server 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. * * L2J Server 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 com.l2jserver.gameserver.model.actor.instance; import java.util.Arrays; import java.util.StringTokenizer; import com.l2jserver.gameserver.data.sql.impl.ClanTable; import com.l2jserver.gameserver.enums.InstanceType; import com.l2jserver.gameserver.instancemanager.ClanHallManager; import com.l2jserver.gameserver.model.L2Clan; import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate; import com.l2jserver.gameserver.model.entity.ClanHall; import com.l2jserver.gameserver.network.serverpackets.ActionFailed; import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jserver.gameserver.util.Evolve; public class L2ClanHallDoormenInstance extends L2DoormenInstance { private volatile boolean _init = false; private ClanHall _clanHall = null; private boolean _hasEvolve = false; // list of clan halls with evolve function, should be sorted private static final int[] CH_WITH_EVOLVE = { 36, 37, 38, 39, 40, 41, 51, 52, 53, 54, 55, 56, 57 }; /** * Creates a clan hall doorman. * @param template the doorman NPC template */ public L2ClanHallDoormenInstance(L2NpcTemplate template) { super(template); setInstanceType(InstanceType.L2ClanHallDoormenInstance); } @Override public void onBypassFeedback(L2PcInstance player, String command) { if (_hasEvolve && command.startsWith("evolve")) { if (isOwnerClan(player)) { StringTokenizer st = new StringTokenizer(command, " "); if (st.countTokens() < 2) { return; } st.nextToken(); boolean ok = false; switch (Integer.parseInt(st.nextToken())) { case 1: ok = Evolve.doEvolve(player, this, 9882, 10307, 55); break; case 2: ok = Evolve.doEvolve(player, this, 4422, 10308, 55); break; case 3: ok = Evolve.doEvolve(player, this, 4423, 10309, 55); break; case 4: ok = Evolve.doEvolve(player, this, 4424, 10310, 55); break; case 5: ok = Evolve.doEvolve(player, this, 10426, 10611, 70); break; } final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); if (ok) { html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/evolve-ok.htm"); } else { html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/evolve-no.htm"); } player.sendPacket(html); return; } } super.onBypassFeedback(player, command); } @Override public void showChatWindow(L2PcInstance player) { player.sendPacket(ActionFailed.STATIC_PACKET); final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); if (getClanHall() != null) { L2Clan owner = ClanTable.getInstance().getClan(getClanHall().getOwnerId()); if (isOwnerClan(player)) { if (_hasEvolve) { html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/doormen2.htm"); html.replace("%clanname%", owner.getName()); } else { html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/doormen1.htm"); html.replace("%clanname%", owner.getName()); } } else { if ((owner != null) && (owner.getLeader() != null)) { html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/doormen-no.htm"); html.replace("%leadername%", owner.getLeaderName()); html.replace("%clanname%", owner.getName()); } else { html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/emptyowner.htm"); html.replace("%hallname%", getClanHall().getName()); } } } else { return; } html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); } @Override protected final void openDoors(L2PcInstance player, String command) { getClanHall().openCloseDoors(true); final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/doormen-opened.htm"); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); } @Override protected final void closeDoors(L2PcInstance player, String command) { getClanHall().openCloseDoors(false); final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile(player.getHtmlPrefix(), "data/html/clanHallDoormen/doormen-closed.htm"); html.replace("%objectId%", String.valueOf(getObjectId())); player.sendPacket(html); } private final ClanHall getClanHall() { if (!_init) { synchronized (this) { if (!_init) { _clanHall = ClanHallManager.getInstance().getNearbyClanHall(getX(), getY(), 500); if (_clanHall != null) { _hasEvolve = Arrays.binarySearch(CH_WITH_EVOLVE, _clanHall.getId()) >= 0; } _init = true; } } } return _clanHall; } @Override protected final boolean isOwnerClan(L2PcInstance player) { if ((player.getClan() != null) && (getClanHall() != null)) { if (player.getClanId() == getClanHall().getOwnerId()) { return true; } } return false; } }