/* * 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 com.l2jmobius.gameserver.instancemanager; import java.io.File; import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import com.l2jmobius.Config; import com.l2jmobius.commons.util.IGameXmlReader; import com.l2jmobius.gameserver.cache.HtmCache; import com.l2jmobius.gameserver.data.xml.impl.SkillData; import com.l2jmobius.gameserver.datatables.ItemTable; import com.l2jmobius.gameserver.enums.PrivateStoreType; import com.l2jmobius.gameserver.handler.CommunityBoardHandler; import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance; import com.l2jmobius.gameserver.model.holders.SellBuffHolder; import com.l2jmobius.gameserver.model.items.L2Item; import com.l2jmobius.gameserver.model.olympiad.OlympiadManager; import com.l2jmobius.gameserver.model.skills.Skill; import com.l2jmobius.gameserver.model.zone.ZoneId; import com.l2jmobius.gameserver.network.serverpackets.ExPrivateStoreSetWholeMsg; import com.l2jmobius.gameserver.util.HtmlUtil; import com.l2jmobius.gameserver.util.Util; /** * Sell Buffs Manager * @author St3eT */ public final class SellBuffsManager implements IGameXmlReader { private static final Logger LOGGER = Logger.getLogger(SellBuffsManager.class.getName()); private static final List ALLOWED_BUFFS = new ArrayList<>(); private static final String htmlFolder = "data/html/mods/SellBuffs/"; protected SellBuffsManager() { load(); } @Override public void load() { if (Config.SELLBUFF_ENABLED) { ALLOWED_BUFFS.clear(); parseDatapackFile("data/SellBuffData.xml"); LOGGER.info(": Loaded " + ALLOWED_BUFFS.size() + " allowed buffs."); } } @Override public void parseDocument(Document doc, File f) { final NodeList node = doc.getDocumentElement().getElementsByTagName("skill"); for (int i = 0; i < node.getLength(); ++i) { final Element elem = (Element) node.item(i); final int skillId = Integer.parseInt(elem.getAttribute("id")); if (!ALLOWED_BUFFS.contains(skillId)) { ALLOWED_BUFFS.add(skillId); } } } public void sendSellMenu(L2PcInstance player) { final String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmlFolder + (player.isSellingBuffs() ? "BuffMenu_already.html" : "BuffMenu.html")); CommunityBoardHandler.separateAndSend(html, player); } public void sendBuffChoiceMenu(L2PcInstance player, int index) { String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmlFolder + "BuffChoice.html"); html = html.replace("%list%", buildSkillMenu(player, index)); CommunityBoardHandler.separateAndSend(html, player); } public void sendBuffEditMenu(L2PcInstance player) { String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmlFolder + "BuffChoice.html"); html = html.replace("%list%", buildEditMenu(player)); CommunityBoardHandler.separateAndSend(html, player); } public void sendBuffMenu(L2PcInstance player, L2PcInstance seller, int index) { if (!seller.isSellingBuffs() || seller.getSellingBuffs().isEmpty()) { return; } String html = HtmCache.getInstance().getHtm(player.getHtmlPrefix(), htmlFolder + "BuffBuyMenu.html"); html = html.replace("%list%", buildBuffMenu(player, seller, index)); CommunityBoardHandler.separateAndSend(html, player); } public void startSellBuffs(L2PcInstance player, String title) { player.sitDown(); player.setIsSellingBuffs(true); player.setPrivateStoreType(PrivateStoreType.PACKAGE_SELL); player.getSellList().setTitle(title); player.getSellList().setPackaged(true); player.broadcastUserInfo(); player.broadcastPacket(new ExPrivateStoreSetWholeMsg(player)); sendSellMenu(player); } public void stopSellBuffs(L2PcInstance player) { player.setIsSellingBuffs(false); player.setPrivateStoreType(PrivateStoreType.NONE); player.standUp(); player.broadcastUserInfo(); sendSellMenu(player); } private String buildBuffMenu(L2PcInstance player, L2PcInstance seller, int index) { final int ceiling = index + 10; int nextIndex = -1; int previousIndex = -1; int emptyFields = 0; final StringBuilder sb = new StringBuilder(); final List sellList = new ArrayList<>(); int count = 0; for (SellBuffHolder holder : seller.getSellingBuffs()) { count++; if ((count > index) && (count <= ceiling)) { sellList.add(holder); } } if (count > 10) { if (count > (index + 10)) { nextIndex = index + 10; } } if (index >= 10) { previousIndex = index - 10; } emptyFields = ceiling - sellList.size(); sb.append("
"); sb.append(HtmlUtil.getMpGauge(250, (long) seller.getCurrentMp(), seller.getMaxMp(), false)); sb.append("
"); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); // Icon sb.append(""); // Name sb.append(""); // Leve sb.append(""); // Price sb.append(""); // Price sb.append(""); // Action sb.append(""); sb.append(""); for (SellBuffHolder holder : sellList) { final Skill skill = seller.getKnownSkill(holder.getSkillId()); if (skill == null) { emptyFields++; continue; } final L2Item item = ItemTable.getInstance().getTemplate(Config.SELLBUFF_PAYMENT_ID); sb.append(""); sb.append(""); sb.append(""); sb.append("" : "")); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); } for (int i = 0; i < emptyFields; i++) { sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); } sb.append("



" + skill.getName() + (skill.getLevel() > 100 ? " + " + (skill.getLevel() % 100) + "" + ((skill.getLevel() > 100) ? SkillData.getInstance().getMaxLevel(skill.getId()) : skill.getLevel()) + " " + (skill.getMpConsume() * Config.SELLBUFF_MP_MULTIPLER) + " " + Util.formatAdena(holder.getPrice()) + " " + (item != null ? item.getName() : "") + "




"); sb.append(""); sb.append(""); if (previousIndex > -1) { sb.append(""); } if (nextIndex > -1) { sb.append(""); } sb.append(""); sb.append("
"); return sb.toString(); } private String buildEditMenu(L2PcInstance player) { final StringBuilder sb = new StringBuilder(); sb.append(""); sb.append(""); sb.append(""); sb.append(""); sb.append(""); // Icon sb.append(""); // Name sb.append(""); // Level sb.append(""); // Old price sb.append(""); // New price sb.append(""); // Change Price sb.append(""); // Remove Buff sb.append(""); sb.append(""); if (player.getSellingBuffs().isEmpty()) { sb.append("



"); sb.append("


"); sb.append("You don't have added any buffs yet!"); } else { for (SellBuffHolder holder : player.getSellingBuffs()) { final Skill skill = player.getKnownSkill(holder.getSkillId()); if (skill == null) { continue; } sb.append(""); sb.append(""); sb.append(""); // Icon sb.append("" + skill.getName() + (skill.getLevel() > 100 ? " + " + (skill.getLevel() % 100) + "" : "")); // Name + enchant sb.append("" + ((skill.getLevel() > 100) ? SkillData.getInstance().getMaxLevel(skill.getId()) : skill.getLevel()) + ""); // Level sb.append(" " + Util.formatAdena(holder.getPrice()) + " "); // Price show sb.append(""); // Price edit sb.append("