Advertisement
Evanth3

Untitled

Jul 24th, 2023
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 13.65 KB | None | 0 0
  1. package l2r.gameserver.model.actor.instance;
  2.  
  3. import java.util.List;
  4.  
  5. import l2r.gameserver.data.HtmlTemplateLoader;
  6. import l2r.gameserver.data.xml.impl.DescriptionsData;
  7. import l2r.gameserver.data.xml.impl.HeroSkillSellerData;
  8. import l2r.gameserver.data.xml.impl.ItemData;
  9. import l2r.gameserver.data.xml.impl.MultisellData;
  10. import l2r.gameserver.data.xml.impl.SkillData;
  11. import l2r.gameserver.data.xml.impl.SkillIconData;
  12. import l2r.gameserver.enums.InstanceType;
  13. import l2r.gameserver.enums.ZoneIdType;
  14. import l2r.gameserver.instancemanager.PunishmentManager;
  15. import l2r.gameserver.instancemanager.SiegeManager;
  16. import l2r.gameserver.instancemanager.TownManager;
  17. import l2r.gameserver.model.actor.FakePc;
  18. import l2r.gameserver.model.actor.L2Npc;
  19. import l2r.gameserver.model.actor.templates.L2NpcTemplate;
  20. import l2r.gameserver.model.holders.IntIntHolder;
  21. import l2r.gameserver.model.holders.SkillSellerHolder;
  22. import l2r.gameserver.model.items.L2Item;
  23. import l2r.gameserver.model.punishment.PunishmentAffect;
  24. import l2r.gameserver.model.punishment.PunishmentTask;
  25. import l2r.gameserver.model.punishment.PunishmentType;
  26. import l2r.gameserver.model.skills.L2Skill;
  27. import l2r.gameserver.network.SystemMessageId;
  28. import l2r.gameserver.network.serverpackets.ActionFailed;
  29. import l2r.gameserver.network.serverpackets.NpcHtmlMessage;
  30. import l2r.gameserver.network.serverpackets.StatusUpdate;
  31. import l2r.gameserver.network.serverpackets.SystemMessage;
  32. import l2r.util.StringUtil;
  33.  
  34. import gr.sr.configsEngine.configs.impl.CustomNpcsConfigs;
  35. import gr.sr.main.Conditions;
  36. import gr.sr.main.TopListsLoader;
  37.  
  38. public class L2HeroNpcInstance extends L2Npc
  39. {
  40.     private static final String CLAN_ROOT = "data/html/custom/HeroNpc/ClanSkills/";
  41.     private static final String NOBLESSE_ROOT = "data/html/custom/HeroNpc/Noblesse/";
  42.     private static final String HERO_ROOT = "data/html/custom/HeroNpc/Hero/";
  43.     private static final String MAIN_ROOT = "data/html/custom/HeroNpc/";
  44.    
  45.     @Override
  46.     public void showChatWindow(L2PcInstance player)
  47.     {
  48.         player.sendPacket(ActionFailed.STATIC_PACKET);
  49.         NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  50.         html.setFile(player, player.getHtmlPrefix(), MAIN_ROOT + "main.htm");
  51.         html.replace("%objectId%", String.valueOf(getObjectId()));
  52.         player.sendPacket(html);
  53.     }
  54.    
  55.     public L2HeroNpcInstance(L2NpcTemplate template)
  56.     {
  57.         super(template);
  58.         setInstanceType(InstanceType.L2HeroNpcInstance);
  59.         FakePc fpc = getFakePc();
  60.         if (fpc != null)
  61.         {
  62.             setTitle(fpc.title);
  63.         }
  64.     }
  65.    
  66.     // Manages all bypasses for normal players
  67.     @Override
  68.     public void onBypassFeedback(final L2PcInstance player, String command)
  69.     {
  70.         // No null pointers
  71.         if (player == null)
  72.         {
  73.             return;
  74.         }
  75.        
  76.         if (!Conditions.checkPlayerConditions(player))
  77.         {
  78.             return;
  79.         }
  80.        
  81.         final String skillType = command.split("_")[1];
  82.        
  83.         if (command.startsWith("Noblesse"))
  84.         {
  85.             if (player.isNoble())
  86.             {
  87.                 NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  88.                 html.setFile(player, player.getHtmlPrefix(), NOBLESSE_ROOT + "main.htm");
  89.                 html.replace("%player%", player.getName());
  90.                 html.replace("%objectId%", String.valueOf(getObjectId()));
  91.                 player.sendPacket(html);
  92.             }
  93.             else
  94.             {
  95.                 player.sendMessage("Sorry, you must be noblesse!");
  96.                 return;
  97.             }
  98.         }
  99.         if (command.startsWith("Clan"))
  100.         {
  101.             if (player.getClan() != null)
  102.             {
  103.                 if (player.getClan().getLevel() < 11)
  104.                 {
  105.                     SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.DO_NOT_HAVE_FURTHER_SKILLS_TO_LEARN_S1);
  106.                    
  107.                     if (player.getClan().getLevel() < 11)
  108.                     {
  109.                         sm.addInt(11);
  110.                     }
  111.                     else
  112.                     {
  113.                         sm.addInt(player.getClan().getLevel() + 1);
  114.                     }
  115.                     NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  116.                     html.setFile(player, player.getHtmlPrefix(), CLAN_ROOT + "main.htm");
  117.                     html.replace("%player%", player.getName());
  118.                     html.replace("%objectId%", String.valueOf(getObjectId()));
  119.                     L2VillageMasterInstance.showPledgeSkillList(player);
  120.                     player.sendPacket(sm);
  121.                     return;
  122.                 }
  123.                 player.sendMessage("Sorry, you must have clan lv 11");
  124.                
  125.                 return;
  126.             }
  127.             player.sendMessage("Sorry, you don't have clan");
  128.             return;
  129.         }
  130.        
  131.         if (command.startsWith("Hero"))
  132.         {
  133.             if (player.isHero())
  134.             {
  135.                 NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  136.                 html.setFile(player, player.getHtmlPrefix(), HERO_ROOT + "main.htm");
  137.                 html.replace("%player%", player.getName());
  138.                 html.replace("%objectId%", String.valueOf(getObjectId()));
  139.                 player.sendPacket(html);
  140.             }
  141.             else
  142.             {
  143.                 player.sendMessage("Sorry, you must be hero!");
  144.                 return;
  145.             }
  146.            
  147.         }
  148.        
  149.         if (command.startsWith("preList"))
  150.         {
  151.             NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  152.             html.setFile(player, player.getHtmlPrefix(), MAIN_ROOT + skillType + ".htm");
  153.             html.replace("%objectId%", String.valueOf(getObjectId()));
  154.             player.sendPacket(html);
  155.             return;
  156.         }
  157.        
  158.         if (command.startsWith("show"))
  159.         {
  160.             NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  161.             html.setFile(player, player.getHtmlPrefix(), MAIN_ROOT + "skillList.htm");
  162.             html.replace("%content%", getContent(player, HeroSkillSellerData.getInstance().getAvailableSkills(player, skillType), skillType));
  163.             html.replace("%objectId%", String.valueOf(getObjectId()));
  164.             player.sendPacket(html);
  165.             return;
  166.         }
  167.        
  168.         if (command.startsWith("info"))
  169.         {
  170.             final SkillSellerHolder holder = getHolder(player, command);
  171.            
  172.             if (holder == null)
  173.             {
  174.                 return;
  175.             }
  176.            
  177.             NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  178.             html.setFile(player, player.getHtmlPrefix(), MAIN_ROOT + "skillInfo.htm");
  179.             html.replace("%player%", player.getName());
  180.             html.replace("%content%", getInfo(holder, player.getSp(), skillType));
  181.             html.replace("%objectId%", String.valueOf(getObjectId()));
  182.             player.sendPacket(html);
  183.             return;
  184.         }
  185.        
  186.         if (command.startsWith("skill"))
  187.         {
  188.             final SkillSellerHolder holder = getHolder(player, command);
  189.            
  190.             if (holder == null)
  191.             {
  192.                 return;
  193.             }
  194.            
  195.             if (player.getLevel() < holder.getRequiredLevel())
  196.             {
  197.                 player.sendMessage("Level too low");
  198.                 return;
  199.             }
  200.            
  201.             if (player.getSp() < holder.getRequiredSp())
  202.             {
  203.                 player.sendMessage("Not enough SP");
  204.                 return;
  205.             }
  206.            
  207.             if (!holder.hasAllItems(player))
  208.             {
  209.                 player.sendMessage("You don't have all thew required items.");
  210.                 return;
  211.             }
  212.            
  213.             if (holder.requireNoble() && !player.isNoble())
  214.             {
  215.                 player.sendMessage("You need to be noble to learn this skill");
  216.                 return;
  217.             }
  218.            
  219.             final IntIntHolder skillToRemove = holder.getRequiredSkill();
  220.            
  221.             final L2Skill skill = player.getKnownSkill(skillToRemove.getId());
  222.            
  223.             if (skill != null)
  224.             {
  225.                 player.removeSkill(skill, true);
  226.             }
  227.            
  228.             for (IntIntHolder item : holder.getItems())
  229.             {
  230.                 player.destroyItemByItemId("Learn", item.getId(), item.getVal(), player, true);
  231.             }
  232.            
  233.             player.setSp(player.getSp() - holder.getRequiredSp());
  234.            
  235.             final StatusUpdate su = player.makeStatusUpdate(StatusUpdate.SP);
  236.             player.sendPacket(su);
  237.            
  238.             player.sendUserInfo(true);
  239.            
  240.             player.addSkill(SkillData.getInstance().getInfo(holder.getSkillId(), holder.getSkillLevel()), true);
  241.             player.sendMessage("You just leaarned " + holder.getName() + " Level " + holder.getSkillLevel());
  242.            
  243.             onBypassFeedback(player, "show_" + command.split("_")[1]);
  244.         }
  245.        
  246.         else if (command.startsWith("teleportToGlobal"))
  247.         {
  248.             final String[] data = command.substring(17).split(" ");
  249.             int requiredLevel = -1;
  250.            
  251.             if (data.length >= 3)
  252.             {
  253.                 requiredLevel = Integer.parseInt(data[2]);
  254.             }
  255.             else if (data.length >= 2)
  256.             {
  257.                 requiredLevel = Integer.parseInt(data[1]);
  258.             }
  259.            
  260.             if ((requiredLevel != -1) && (player.getLevel() < requiredLevel))
  261.             {
  262.                 player.sendMessageAsAnnouncement("You need at least " + requiredLevel + " level to teleport.", true);
  263.                 return;
  264.             }
  265.            
  266.             final int teleportId = Integer.parseInt(data[0]);
  267.             final Integer[] teleportData = TopListsLoader.getInstance().getTeleportInfo(teleportId);
  268.             int x = teleportData[0];
  269.             int y = teleportData[1];
  270.             int z = teleportData[2];
  271.             boolean forNoble = teleportData[3] == 1;
  272.             int costId = teleportData[4];
  273.             long costCount = teleportData[5];
  274.            
  275.             if (forNoble && !player.isNoble() && !player.isGM())
  276.             {
  277.                 return;
  278.             }
  279.            
  280.             if (!CustomNpcsConfigs.ALLOW_TELEPORT_DURING_SIEGE)
  281.             {
  282.                 if (SiegeManager.getInstance().getSiege(x, y, z) != null)
  283.                 {
  284.                     player.sendPacket(SystemMessageId.NO_PORT_THAT_IS_IN_SIGE);
  285.                     return;
  286.                 }
  287.                 else if (TownManager.townHasCastleInSiege(x, y) && isInsideZone(ZoneIdType.TOWN))
  288.                 {
  289.                     player.sendPacket(SystemMessageId.NO_PORT_THAT_IS_IN_SIGE);
  290.                     return;
  291.                 }
  292.             }
  293.            
  294.             if (!player.destroyItemByItemId("", costId, costCount, player, true))
  295.             {
  296.                 player.sendMessage("Incorrect item count.");
  297.                 return;
  298.             }
  299.            
  300.             if (player.isTransformed() && ((player.getTransformationId() == 9) || (player.getTransformationId() == 8)))
  301.             {
  302.                 player.untransform();
  303.             }
  304.            
  305.             player.teleToLocation(x, y, z);
  306.            
  307.         }
  308.        
  309.         if (command.startsWith("multisell"))
  310.         {
  311.             final String subCommand = command.split("_")[1];
  312.             int listId = Integer.parseInt(subCommand);
  313.            
  314.             switch (listId)
  315.             {
  316.                 // ******************B Shop****************//
  317.                 case 0:
  318.                     listId = 90002;
  319.                     break;
  320.                 case 1:
  321.                     listId = 90014;
  322.                     break;
  323.                 case 2:
  324.                     listId = 90009;
  325.                     break;
  326.                 case 3:
  327.                     listId = 90026;
  328.                     break;
  329.                 case 4:
  330.                     listId = 90569;
  331.                     break;
  332.                 case 5:
  333.                     listId = 90542;
  334.                     break;
  335.                 case 6:
  336.                     listId = 90551;
  337.                     break;
  338.                 case 7:
  339.                     listId = 90088;
  340.                     break;
  341.                
  342.                 default:
  343.                     listId = 1_000_000;
  344.                     break;
  345.             }
  346.            
  347.             if (listId != 1_000_000)
  348.             {
  349.                 MultisellData.getInstance().separateAndSend(listId, player, getAttackable(), _isTeleporting);
  350.             }
  351.             else
  352.             {
  353.                 PunishmentManager.getInstance().startPunishment(new PunishmentTask(player.getObjectId(), PunishmentAffect.CHARACTER, PunishmentType.JAIL, System.currentTimeMillis() + 86400000, "24 hours jail by exploit bypasses using L2Adrenaline/Other ", player.getName()));
  354.                
  355.             }
  356.         }
  357.     }
  358.    
  359.     private SkillSellerHolder getHolder(L2PcInstance player, String command)
  360.     {
  361.         final String[] data = command.split("_");
  362.         final String cat = data[1];
  363.         final int skillId = Integer.parseInt(data[2]);
  364.         final int skillLevel = Integer.parseInt(data[3]);
  365.        
  366.         return HeroSkillSellerData.getInstance().getAvailableSkills(player, cat).stream().filter(sk -> sk.sameAs(skillId, skillLevel)).findFirst().orElse(null);
  367.     }
  368.    
  369.     private String getInfo(SkillSellerHolder holder, int mySp, String skillType)
  370.     {
  371.         if (holder == null)
  372.         {
  373.             return "";
  374.         }
  375.        
  376.         final int skillId = holder.getSkillId();
  377.         final int skillLevel = holder.getSkillLevel();
  378.        
  379.         String block = HtmlTemplateLoader.getInstance().getContent("skillSellerInfo");
  380.        
  381.         block = block.replaceAll("%icon%", SkillIconData.getInstance().getIcon(skillId));
  382.         block = block.replace("%name%", holder.getName());
  383.         block = block.replaceAll("%lvl%", String.valueOf(skillLevel));
  384.         block = block.replace("%skillType%", (SkillData.getInstance().getInfo(skillId, skillLevel).isPassive() ? "Passive" : "Active") + " Skill");
  385.         block = block.replace("%desc%", DescriptionsData.getInstance().getDesc(skillId, skillLevel));
  386.         block = block.replace("%mySp%", StringUtil.formatNumber(mySp));
  387.         block = block.replace("%reqSp%", StringUtil.formatNumber(holder.getRequiredSp()));
  388.         block = block.replace("%items%", getItems(holder));
  389.         block = block.replace("%id%", String.valueOf(holder.getSkillId()));
  390.         block = block.replace("%cat%", skillType);
  391.         return block;
  392.     }
  393.    
  394.     private String getItems(SkillSellerHolder holder)
  395.     {
  396.         StringBuilder sb = new StringBuilder();
  397.        
  398.         for (IntIntHolder itemHolder : holder.getItems())
  399.         {
  400.             final L2Item item = ItemData.getInstance().getTemplate(itemHolder.getId());
  401.            
  402.             String itemBlock = HtmlTemplateLoader.getInstance().getContent("skillSellerItem");
  403.            
  404.             itemBlock = itemBlock.replaceAll("%icon%", item.getIcon());
  405.             itemBlock = itemBlock.replace("%name%", item.getName());
  406.             itemBlock = itemBlock.replace("%amount%", StringUtil.formatNumber(itemHolder.getVal()));
  407.            
  408.             sb.append(itemBlock);
  409.         }
  410.        
  411.         return sb.toString();
  412.     }
  413.    
  414.     private String getContent(L2PcInstance player, List<SkillSellerHolder> list, String skillType)
  415.     {
  416.         if (list.isEmpty())
  417.         {
  418.             return "No more skills to learn.";
  419.         }
  420.        
  421.         String block = "";
  422.        
  423.         StringBuilder sb = new StringBuilder();
  424.        
  425.         for (SkillSellerHolder holder : list)
  426.         {
  427.             final int id = holder.getSkillId();
  428.             final int lvl = holder.getSkillLevel();
  429.            
  430.             final boolean isNoblesse = player.isNoble();
  431.            
  432.             final int maxLv = SkillData.getInstance().getMaxLevel(id);
  433.             block = HtmlTemplateLoader.getInstance().getContent("skillSellerList");
  434.            
  435.             block = block.replaceAll("%icon%", SkillIconData.getInstance().getIcon(holder.getSkillId()));
  436.             block = block.replace("%name%", holder.getName());
  437.             block = block.replaceAll("%lvl%", String.valueOf(holder.getSkillLevel()));
  438.             block = block.replace("%skillType%", (SkillData.getInstance().getInfo(id, lvl).isPassive() ? "Passive" : "Active") + " Skill");
  439.             block = block.replace("%id%", String.valueOf(holder.getSkillId()));
  440.             block = block.replace("%cat%", skillType);
  441.             block = block.replace("%reqNoble%", String.valueOf(isNoblesse ? 1 : 0));
  442.             block = block.replace("%reqSp%", String.valueOf(holder.getRequiredSp()));
  443.             block = block.replace("%maxlv%", String.valueOf(maxLv));
  444.            
  445.             sb.append(block);
  446.         }
  447.        
  448.         return sb.toString();
  449.     }
  450. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement