Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package l2r.gameserver.model.actor.instance;
- import java.util.List;
- import l2r.gameserver.data.HtmlTemplateLoader;
- import l2r.gameserver.data.xml.impl.DescriptionsData;
- import l2r.gameserver.data.xml.impl.ItemData;
- import l2r.gameserver.data.xml.impl.SkillData;
- import l2r.gameserver.data.xml.impl.SkillIconData;
- import l2r.gameserver.data.xml.impl.SkillSellerData;
- import l2r.gameserver.enums.InstanceType;
- import l2r.gameserver.enums.ZoneIdType;
- import l2r.gameserver.instancemanager.SiegeManager;
- import l2r.gameserver.instancemanager.TownManager;
- import l2r.gameserver.model.actor.FakePc;
- import l2r.gameserver.model.actor.L2Npc;
- import l2r.gameserver.model.actor.templates.L2NpcTemplate;
- import l2r.gameserver.model.holders.IntIntHolder;
- import l2r.gameserver.model.holders.SkillSellerHolder;
- import l2r.gameserver.model.items.L2Item;
- import l2r.gameserver.model.skills.L2Skill;
- import l2r.gameserver.network.SystemMessageId;
- import l2r.gameserver.network.serverpackets.ActionFailed;
- import l2r.gameserver.network.serverpackets.NpcHtmlMessage;
- import l2r.gameserver.network.serverpackets.StatusUpdate;
- import l2r.util.StringUtil;
- import gr.sr.configsEngine.configs.impl.CustomNpcsConfigs;
- import gr.sr.main.Conditions;
- import gr.sr.main.TopListsLoader;
- public class L2SkillSellerInstance extends L2Npc
- {
- private static final String ROOT = "data/html/custom/skillSeller/";
- @Override
- public void showChatWindow(L2PcInstance player)
- {
- player.sendPacket(ActionFailed.STATIC_PACKET);
- NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
- html.setFile(player, player.getHtmlPrefix(), ROOT + "main.htm");
- html.replace("%objectId%", String.valueOf(getObjectId()));
- player.sendPacket(html);
- }
- public L2SkillSellerInstance(L2NpcTemplate template)
- {
- super(template);
- setInstanceType(InstanceType.L2SkillSellerInstance);
- FakePc fpc = getFakePc();
- if (fpc != null)
- {
- setTitle(fpc.title);
- }
- }
- // Manages all bypasses for normal players
- @Override
- public void onBypassFeedback(final L2PcInstance player, String command)
- {
- // No null pointers
- if (player == null)
- {
- return;
- }
- if (!Conditions.checkPlayerConditions(player))
- {
- return;
- }
- final String skillType = command.split("_")[1];
- if (command.startsWith("preList"))
- {
- NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
- html.setFile(player, player.getHtmlPrefix(), ROOT + skillType + ".htm");
- html.replace("%objectId%", String.valueOf(getObjectId()));
- player.sendPacket(html);
- return;
- }
- if (command.startsWith("show"))
- {
- NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
- html.setFile(player, player.getHtmlPrefix(), ROOT + "skillList.htm");
- html.replace("%content%", getContent(player, SkillSellerData.getInstance().getAvailableSkills(player, skillType), skillType));
- html.replace("%objectId%", String.valueOf(getObjectId()));
- player.sendPacket(html);
- return;
- }
- if (command.startsWith("info"))
- {
- final SkillSellerHolder holder = getHolder(player, command);
- if (holder == null)
- {
- return;
- }
- NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
- html.setFile(player, player.getHtmlPrefix(), ROOT + "skillInfo.htm");
- html.replace("%player%", player.getName());
- html.replace("%content%", getInfo(holder, player.getSp(), skillType));
- html.replace("%objectId%", String.valueOf(getObjectId()));
- player.sendPacket(html);
- return;
- }
- if (command.startsWith("skill"))
- {
- final SkillSellerHolder holder = getHolder(player, command);
- if (holder == null)
- {
- return;
- }
- if (player.getLevel() < holder.getRequiredLevel())
- {
- player.sendMessage("Level too low");
- return;
- }
- if (player.getSp() < holder.getRequiredSp())
- {
- player.sendMessage("Not enough SP");
- return;
- }
- if (!holder.hasAllItems(player))
- {
- player.sendMessage("You don't have all thew required items.");
- return;
- }
- if (holder.requireNoble() && !player.isNoble())
- {
- player.sendMessage("You need to be noble to learn this skill");
- return;
- }
- final IntIntHolder skillToRemove = holder.getRequiredSkill();
- final L2Skill skill = player.getKnownSkill(skillToRemove.getId());
- if (skill != null)
- {
- player.removeSkill(skill, true);
- }
- for (IntIntHolder item : holder.getItems())
- {
- player.destroyItemByItemId("Learn", item.getId(), item.getVal(), player, true);
- }
- player.setSp(player.getSp() - holder.getRequiredSp());
- final StatusUpdate su = player.makeStatusUpdate(StatusUpdate.SP);
- player.sendPacket(su);
- player.sendUserInfo(true);
- player.addSkill(SkillData.getInstance().getInfo(holder.getSkillId(), holder.getSkillLevel()), true);
- player.sendMessage("You just leaarned " + holder.getName() + " Level " + holder.getSkillLevel());
- onBypassFeedback(player, "show_" + command.split("_")[1]);
- }
- if (command.startsWith("teleportToGlobal"))
- {
- final String[] subCommand = command.split("_");
- try
- {
- int[] c = new int[3];
- Integer[] tpInfo = TopListsLoader.getInstance().getTeleportInfo(Integer.parseInt(subCommand[1]));
- c[0] = tpInfo[0];
- c[1] = tpInfo[1];
- c[2] = tpInfo[2];
- boolean onlyForNobless = tpInfo[3] == 1;
- int itemIdToGet = tpInfo[4];
- int price = tpInfo[5];
- if (!CustomNpcsConfigs.ALLOW_TELEPORT_DURING_SIEGE)
- {
- if (SiegeManager.getInstance().getSiege(c[0], c[1], c[2]) != null)
- {
- player.sendPacket(SystemMessageId.NO_PORT_THAT_IS_IN_SIGE);
- return;
- }
- else if (TownManager.townHasCastleInSiege(c[0], c[1]) && isInsideZone(ZoneIdType.TOWN))
- {
- player.sendPacket(SystemMessageId.NO_PORT_THAT_IS_IN_SIGE);
- return;
- }
- }
- if (onlyForNobless && !player.isNoble() && !player.isGM())
- {
- player.sendMessage("Only noble chars can teleport there.");
- return;
- }
- if (player.isTransformed())
- {
- if ((player.getTransformationId() == 9) || (player.getTransformationId() == 8))
- {
- player.untransform();
- }
- }
- player.destroyItemByItemId("Npc Teleport", itemIdToGet, price, player, true);
- player.teleToLocation(c[0], c[1], c[2]);
- }
- catch (Exception e)
- {
- // SecurityActions.startSecurity(player, SecurityType.CUSTON_GATEKEEPER);
- }
- }
- }
- private SkillSellerHolder getHolder(L2PcInstance player, String command)
- {
- final String[] data = command.split("_");
- final String cat = data[1];
- final int skillId = Integer.parseInt(data[2]);
- final int skillLevel = Integer.parseInt(data[3]);
- return SkillSellerData.getInstance().getAvailableSkills(player, cat).stream().filter(sk -> sk.sameAs(skillId, skillLevel)).findFirst().orElse(null);
- }
- private String getInfo(SkillSellerHolder holder, int mySp, String skillType)
- {
- if (holder == null)
- {
- return "";
- }
- final int skillId = holder.getSkillId();
- final int skillLevel = holder.getSkillLevel();
- String block = HtmlTemplateLoader.getInstance().getContent("skillSellerInfo");
- block = block.replaceAll("%icon%", SkillIconData.getInstance().getIcon(skillId));
- block = block.replace("%name%", holder.getName());
- block = block.replaceAll("%lvl%", String.valueOf(skillLevel));
- block = block.replace("%skillType%", (SkillData.getInstance().getInfo(skillId, skillLevel).isPassive() ? "Passive" : "Active") + " Skill");
- block = block.replace("%desc%", DescriptionsData.getInstance().getDesc(skillId, skillLevel));
- block = block.replace("%mySp%", StringUtil.formatNumber(mySp));
- block = block.replace("%reqSp%", StringUtil.formatNumber(holder.getRequiredSp()));
- block = block.replace("%items%", getItems(holder));
- block = block.replace("%id%", String.valueOf(holder.getSkillId()));
- block = block.replace("%cat%", skillType);
- return block;
- }
- private String getItems(SkillSellerHolder holder)
- {
- StringBuilder sb = new StringBuilder();
- for (IntIntHolder itemHolder : holder.getItems())
- {
- final L2Item item = ItemData.getInstance().getTemplate(itemHolder.getId());
- String itemBlock = HtmlTemplateLoader.getInstance().getContent("skillSellerItem");
- itemBlock = itemBlock.replaceAll("%icon%", item.getIcon());
- itemBlock = itemBlock.replace("%name%", item.getName());
- itemBlock = itemBlock.replace("%amount%", StringUtil.formatNumber(itemHolder.getVal()));
- sb.append(itemBlock);
- }
- return sb.toString();
- }
- private String getContent(L2PcInstance player, List<SkillSellerHolder> list, String skillType)
- {
- if (list.isEmpty())
- {
- return "No more skills to learn.";
- }
- String block = "";
- StringBuilder sb = new StringBuilder();
- for (SkillSellerHolder holder : list)
- {
- final int id = holder.getSkillId();
- final int lvl = holder.getSkillLevel();
- final boolean isNoblesse = player.isNoble();
- final int maxLv = SkillData.getInstance().getMaxLevel(id);
- block = HtmlTemplateLoader.getInstance().getContent("skillSellerList");
- block = block.replaceAll("%icon%", SkillIconData.getInstance().getIcon(holder.getSkillId()));
- block = block.replace("%name%", holder.getName());
- block = block.replaceAll("%lvl%", String.valueOf(holder.getSkillLevel()));
- block = block.replace("%skillType%", (SkillData.getInstance().getInfo(id, lvl).isPassive() ? "Passive" : "Active") + " Skill");
- block = block.replace("%id%", String.valueOf(holder.getSkillId()));
- block = block.replace("%cat%", skillType);
- block = block.replace("%reqNoble%", String.valueOf(isNoblesse ? 1 : 0));
- block = block.replace("%reqSp%", String.valueOf(holder.getRequiredSp()));
- block = block.replace("%maxlv%", String.valueOf(maxLv));
- sb.append(block);
- }
- return sb.toString();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement