/* * Copyright (C) 2004-2014 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 com.l2jserver.Config; import com.l2jserver.gameserver.SevenSigns; import com.l2jserver.gameserver.SevenSignsFestival; import com.l2jserver.gameserver.enums.InstanceType; import com.l2jserver.gameserver.model.actor.L2Npc; import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate; import com.l2jserver.gameserver.network.serverpackets.ActionFailed; import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage; import com.l2jserver.util.StringUtil; /** * Festival of Darkness Guide (Seven Signs) * @author Tempy */ public final class L2FestivalGuideInstance extends L2Npc { private final int _festivalType; private final int _festivalOracle; private final int _blueStonesNeeded; private final int _greenStonesNeeded; private final int _redStonesNeeded; /** * @param objectId * @param template */ public L2FestivalGuideInstance(int objectId, L2NpcTemplate template) { super(objectId, template); setInstanceType(InstanceType.L2FestivalGiudeInstance); switch (getId()) { case 31127: case 31132: _festivalType = SevenSignsFestival.FESTIVAL_LEVEL_MAX_31; _festivalOracle = SevenSigns.CABAL_DAWN; _blueStonesNeeded = 900; _greenStonesNeeded = 540; _redStonesNeeded = 270; break; case 31128: case 31133: _festivalType = SevenSignsFestival.FESTIVAL_LEVEL_MAX_42; _festivalOracle = SevenSigns.CABAL_DAWN; _blueStonesNeeded = 1500; _greenStonesNeeded = 900; _redStonesNeeded = 450; break; case 31129: case 31134: _festivalType = SevenSignsFestival.FESTIVAL_LEVEL_MAX_53; _festivalOracle = SevenSigns.CABAL_DAWN; _blueStonesNeeded = 3000; _greenStonesNeeded = 1800; _redStonesNeeded = 900; break; case 31130: case 31135: _festivalType = SevenSignsFestival.FESTIVAL_LEVEL_MAX_64; _festivalOracle = SevenSigns.CABAL_DAWN; _blueStonesNeeded = 4500; _greenStonesNeeded = 2700; _redStonesNeeded = 1350; break; case 31131: case 31136: _festivalType = SevenSignsFestival.FESTIVAL_LEVEL_MAX_NONE; _festivalOracle = SevenSigns.CABAL_DAWN; _blueStonesNeeded = 6000; _greenStonesNeeded = 3600; _redStonesNeeded = 1800; break; case 31137: case 31142: _festivalType = SevenSignsFestival.FESTIVAL_LEVEL_MAX_31; _festivalOracle = SevenSigns.CABAL_DUSK; _blueStonesNeeded = 900; _greenStonesNeeded = 540; _redStonesNeeded = 270; break; case 31138: case 31143: _festivalType = SevenSignsFestival.FESTIVAL_LEVEL_MAX_42; _festivalOracle = SevenSigns.CABAL_DUSK; _blueStonesNeeded = 1500; _greenStonesNeeded = 900; _redStonesNeeded = 450; break; case 31139: case 31144: _festivalType = SevenSignsFestival.FESTIVAL_LEVEL_MAX_53; _festivalOracle = SevenSigns.CABAL_DUSK; _blueStonesNeeded = 3000; _greenStonesNeeded = 1800; _redStonesNeeded = 900; break; case 31140: case 31145: _festivalType = SevenSignsFestival.FESTIVAL_LEVEL_MAX_64; _festivalOracle = SevenSigns.CABAL_DUSK; _blueStonesNeeded = 4500; _greenStonesNeeded = 2700; _redStonesNeeded = 1350; break; case 31141: case 31146: _festivalType = SevenSignsFestival.FESTIVAL_LEVEL_MAX_NONE; _festivalOracle = SevenSigns.CABAL_DUSK; _blueStonesNeeded = 6000; _greenStonesNeeded = 3600; _redStonesNeeded = 1800; break; default: _festivalType = SevenSignsFestival.FESTIVAL_LEVEL_MAX_NONE; _festivalOracle = SevenSigns.CABAL_NULL; _blueStonesNeeded = 0; _greenStonesNeeded = 0; _redStonesNeeded = 0; } } public int getFestivalType() { return _festivalType; } public int getFestivalOracle() { return _festivalOracle; } public int getStoneCount(int stoneType) { switch (stoneType) { case SevenSigns.SEAL_STONE_BLUE_ID: return _blueStonesNeeded; case SevenSigns.SEAL_STONE_GREEN_ID: return _greenStonesNeeded; case SevenSigns.SEAL_STONE_RED_ID: return _redStonesNeeded; default: return -1; } } public final void showChatWindow(L2PcInstance player, int val, String suffix, boolean isDescription) { String filename = SevenSigns.SEVEN_SIGNS_HTML_PATH + "festival/"; filename += (isDescription) ? "desc_" : "festival_"; filename += (suffix != null) ? val + suffix + ".htm" : val + ".htm"; // Send a Server->Client NpcHtmlMessage containing the text of the L2NpcInstance to the L2PcInstance final NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); html.setFile(player.getHtmlPrefix(), filename); html.replace("%objectId%", String.valueOf(getObjectId())); html.replace("%festivalType%", SevenSignsFestival.getFestivalName(_festivalType)); html.replace("%cycleMins%", String.valueOf(SevenSignsFestival.getInstance().getMinsToNextCycle())); if (!isDescription && "2b".equals(val + suffix)) { html.replace("%minFestivalPartyMembers%", String.valueOf(Config.ALT_FESTIVAL_MIN_PLAYER)); } // If the stats or bonus table is required, construct them. if (val == 5) { html.replace("%statsTable%", getStatsTable()); } if (val == 6) { html.replace("%bonusTable%", getBonusTable()); } // festival's fee if (val == 1) { html.replace("%blueStoneNeeded%", String.valueOf(_blueStonesNeeded)); html.replace("%greenStoneNeeded%", String.valueOf(_greenStonesNeeded)); html.replace("%redStoneNeeded%", String.valueOf(_redStonesNeeded)); } player.sendPacket(html); // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet player.sendPacket(ActionFailed.STATIC_PACKET); } private static final String getStatsTable() { final StringBuilder tableHtml = new StringBuilder(1000); // Get the scores for each of the festival level ranges (types). for (int i = 0; i < 5; i++) { int dawnScore = SevenSignsFestival.getInstance().getHighestScore(SevenSigns.CABAL_DAWN, i); int duskScore = SevenSignsFestival.getInstance().getHighestScore(SevenSigns.CABAL_DUSK, i); String festivalName = SevenSignsFestival.getFestivalName(i); String winningCabal = "Children of Dusk"; if (dawnScore > duskScore) { winningCabal = "Children of Dawn"; } else if (dawnScore == duskScore) { winningCabal = "None"; } StringUtil.append(tableHtml, "<tr><td width=\"100\" align=\"center\">", festivalName, "</td><td align=\"center\" width=\"35\">", String.valueOf(duskScore), "</td><td align=\"center\" width=\"35\">", String.valueOf(dawnScore), "</td><td align=\"center\" width=\"130\">", winningCabal, "</td></tr>"); } return tableHtml.toString(); } private static final String getBonusTable() { final StringBuilder tableHtml = new StringBuilder(500); // Get the accumulated scores for each of the festival level ranges (types). for (int i = 0; i < 5; i++) { int accumScore = SevenSignsFestival.getInstance().getAccumulatedBonus(i); String festivalName = SevenSignsFestival.getFestivalName(i); StringUtil.append(tableHtml, "<tr><td align=\"center\" width=\"150\">", festivalName, "</td><td align=\"center\" width=\"150\">", String.valueOf(accumScore), "</td></tr>"); } return tableHtml.toString(); } }