Advertisement
Evanth3

Untitled

May 29th, 2023
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 9.89 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.ItemData;
  8. import l2r.gameserver.data.xml.impl.SkillData;
  9. import l2r.gameserver.data.xml.impl.SkillIconData;
  10. import l2r.gameserver.data.xml.impl.SkillSellerData;
  11. import l2r.gameserver.enums.InstanceType;
  12. import l2r.gameserver.enums.ZoneIdType;
  13. import l2r.gameserver.instancemanager.SiegeManager;
  14. import l2r.gameserver.instancemanager.TownManager;
  15. import l2r.gameserver.model.actor.FakePc;
  16. import l2r.gameserver.model.actor.L2Npc;
  17. import l2r.gameserver.model.actor.templates.L2NpcTemplate;
  18. import l2r.gameserver.model.holders.IntIntHolder;
  19. import l2r.gameserver.model.holders.SkillSellerHolder;
  20. import l2r.gameserver.model.items.L2Item;
  21. import l2r.gameserver.model.skills.L2Skill;
  22. import l2r.gameserver.network.SystemMessageId;
  23. import l2r.gameserver.network.serverpackets.ActionFailed;
  24. import l2r.gameserver.network.serverpackets.NpcHtmlMessage;
  25. import l2r.gameserver.network.serverpackets.StatusUpdate;
  26. import l2r.util.StringUtil;
  27.  
  28. import gr.sr.configsEngine.configs.impl.CustomNpcsConfigs;
  29. import gr.sr.main.Conditions;
  30. import gr.sr.main.TopListsLoader;
  31.  
  32. public class L2SkillSellerInstance extends L2Npc
  33. {
  34.     private static final String ROOT = "data/html/custom/skillSeller/";
  35.    
  36.     @Override
  37.     public void showChatWindow(L2PcInstance player)
  38.     {
  39.         player.sendPacket(ActionFailed.STATIC_PACKET);
  40.         NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  41.         html.setFile(player, player.getHtmlPrefix(), ROOT + "main.htm");
  42.         html.replace("%objectId%", String.valueOf(getObjectId()));
  43.         player.sendPacket(html);
  44.     }
  45.    
  46.     public L2SkillSellerInstance(L2NpcTemplate template)
  47.     {
  48.         super(template);
  49.         setInstanceType(InstanceType.L2SkillSellerInstance);
  50.         FakePc fpc = getFakePc();
  51.         if (fpc != null)
  52.         {
  53.             setTitle(fpc.title);
  54.         }
  55.     }
  56.    
  57.     // Manages all bypasses for normal players
  58.     @Override
  59.     public void onBypassFeedback(final L2PcInstance player, String command)
  60.     {
  61.         // No null pointers
  62.         if (player == null)
  63.         {
  64.             return;
  65.         }
  66.        
  67.         if (!Conditions.checkPlayerConditions(player))
  68.         {
  69.             return;
  70.         }
  71.        
  72.         final String skillType = command.split("_")[1];
  73.        
  74.         if (command.startsWith("preList"))
  75.         {
  76.             NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  77.             html.setFile(player, player.getHtmlPrefix(), ROOT + skillType + ".htm");
  78.             html.replace("%objectId%", String.valueOf(getObjectId()));
  79.             player.sendPacket(html);
  80.             return;
  81.         }
  82.        
  83.         if (command.startsWith("show"))
  84.         {
  85.             NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  86.             html.setFile(player, player.getHtmlPrefix(), ROOT + "skillList.htm");
  87.             html.replace("%content%", getContent(player, SkillSellerData.getInstance().getAvailableSkills(player, skillType), skillType));
  88.             html.replace("%objectId%", String.valueOf(getObjectId()));
  89.             player.sendPacket(html);
  90.             return;
  91.         }
  92.        
  93.         if (command.startsWith("info"))
  94.         {
  95.             final SkillSellerHolder holder = getHolder(player, command);
  96.            
  97.             if (holder == null)
  98.             {
  99.                 return;
  100.             }
  101.            
  102.             NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  103.             html.setFile(player, player.getHtmlPrefix(), ROOT + "skillInfo.htm");
  104.             html.replace("%player%", player.getName());
  105.             html.replace("%content%", getInfo(holder, player.getSp(), skillType));
  106.             html.replace("%objectId%", String.valueOf(getObjectId()));
  107.             player.sendPacket(html);
  108.             return;
  109.         }
  110.        
  111.         if (command.startsWith("skill"))
  112.         {
  113.             final SkillSellerHolder holder = getHolder(player, command);
  114.            
  115.             if (holder == null)
  116.             {
  117.                 return;
  118.             }
  119.            
  120.             if (player.getLevel() < holder.getRequiredLevel())
  121.             {
  122.                 player.sendMessage("Level too low");
  123.                 return;
  124.             }
  125.            
  126.             if (player.getSp() < holder.getRequiredSp())
  127.             {
  128.                 player.sendMessage("Not enough SP");
  129.                 return;
  130.             }
  131.            
  132.             if (!holder.hasAllItems(player))
  133.             {
  134.                 player.sendMessage("You don't have all thew required items.");
  135.                 return;
  136.             }
  137.            
  138.             if (holder.requireNoble() && !player.isNoble())
  139.             {
  140.                 player.sendMessage("You need to be noble to learn this skill");
  141.                 return;
  142.             }
  143.            
  144.             final IntIntHolder skillToRemove = holder.getRequiredSkill();
  145.            
  146.             final L2Skill skill = player.getKnownSkill(skillToRemove.getId());
  147.            
  148.             if (skill != null)
  149.             {
  150.                 player.removeSkill(skill, true);
  151.             }
  152.            
  153.             for (IntIntHolder item : holder.getItems())
  154.             {
  155.                 player.destroyItemByItemId("Learn", item.getId(), item.getVal(), player, true);
  156.             }
  157.            
  158.             player.setSp(player.getSp() - holder.getRequiredSp());
  159.            
  160.             final StatusUpdate su = player.makeStatusUpdate(StatusUpdate.SP);
  161.             player.sendPacket(su);
  162.            
  163.             player.sendUserInfo(true);
  164.            
  165.             player.addSkill(SkillData.getInstance().getInfo(holder.getSkillId(), holder.getSkillLevel()), true);
  166.             player.sendMessage("You just leaarned " + holder.getName() + " Level " + holder.getSkillLevel());
  167.            
  168.             onBypassFeedback(player, "show_" + command.split("_")[1]);
  169.         }
  170.        
  171.         if (command.startsWith("teleportToGlobal"))
  172.         {
  173.             final String[] subCommand = command.split("_");
  174.             try
  175.             {
  176.                 int[] c = new int[3];
  177.                 Integer[] tpInfo = TopListsLoader.getInstance().getTeleportInfo(Integer.parseInt(subCommand[1]));
  178.                 c[0] = tpInfo[0];
  179.                 c[1] = tpInfo[1];
  180.                 c[2] = tpInfo[2];
  181.                 boolean onlyForNobless = tpInfo[3] == 1;
  182.                 int itemIdToGet = tpInfo[4];
  183.                 int price = tpInfo[5];
  184.                
  185.                 if (!CustomNpcsConfigs.ALLOW_TELEPORT_DURING_SIEGE)
  186.                 {
  187.                     if (SiegeManager.getInstance().getSiege(c[0], c[1], c[2]) != null)
  188.                     {
  189.                         player.sendPacket(SystemMessageId.NO_PORT_THAT_IS_IN_SIGE);
  190.                         return;
  191.                     }
  192.                     else if (TownManager.townHasCastleInSiege(c[0], c[1]) && isInsideZone(ZoneIdType.TOWN))
  193.                     {
  194.                         player.sendPacket(SystemMessageId.NO_PORT_THAT_IS_IN_SIGE);
  195.                         return;
  196.                     }
  197.                 }
  198.                
  199.                 if (onlyForNobless && !player.isNoble() && !player.isGM())
  200.                 {
  201.                     player.sendMessage("Only noble chars can teleport there.");
  202.                     return;
  203.                 }
  204.                
  205.                 if (player.isTransformed())
  206.                 {
  207.                     if ((player.getTransformationId() == 9) || (player.getTransformationId() == 8))
  208.                     {
  209.                         player.untransform();
  210.                     }
  211.                 }
  212.                
  213.                 player.destroyItemByItemId("Npc Teleport", itemIdToGet, price, player, true);
  214.                 player.teleToLocation(c[0], c[1], c[2]);
  215.             }
  216.             catch (Exception e)
  217.             {
  218.                 // SecurityActions.startSecurity(player, SecurityType.CUSTON_GATEKEEPER);
  219.             }
  220.         }
  221.     }
  222.    
  223.     private SkillSellerHolder getHolder(L2PcInstance player, String command)
  224.     {
  225.         final String[] data = command.split("_");
  226.         final String cat = data[1];
  227.         final int skillId = Integer.parseInt(data[2]);
  228.         final int skillLevel = Integer.parseInt(data[3]);
  229.        
  230.         return SkillSellerData.getInstance().getAvailableSkills(player, cat).stream().filter(sk -> sk.sameAs(skillId, skillLevel)).findFirst().orElse(null);
  231.     }
  232.    
  233.     private String getInfo(SkillSellerHolder holder, int mySp, String skillType)
  234.     {
  235.         if (holder == null)
  236.         {
  237.             return "";
  238.         }
  239.        
  240.         final int skillId = holder.getSkillId();
  241.         final int skillLevel = holder.getSkillLevel();
  242.        
  243.         String block = HtmlTemplateLoader.getInstance().getContent("skillSellerInfo");
  244.        
  245.         block = block.replaceAll("%icon%", SkillIconData.getInstance().getIcon(skillId));
  246.         block = block.replace("%name%", holder.getName());
  247.         block = block.replaceAll("%lvl%", String.valueOf(skillLevel));
  248.         block = block.replace("%skillType%", (SkillData.getInstance().getInfo(skillId, skillLevel).isPassive() ? "Passive" : "Active") + " Skill");
  249.         block = block.replace("%desc%", DescriptionsData.getInstance().getDesc(skillId, skillLevel));
  250.         block = block.replace("%mySp%", StringUtil.formatNumber(mySp));
  251.         block = block.replace("%reqSp%", StringUtil.formatNumber(holder.getRequiredSp()));
  252.         block = block.replace("%items%", getItems(holder));
  253.         block = block.replace("%id%", String.valueOf(holder.getSkillId()));
  254.         block = block.replace("%cat%", skillType);
  255.         return block;
  256.     }
  257.    
  258.     private String getItems(SkillSellerHolder holder)
  259.     {
  260.         StringBuilder sb = new StringBuilder();
  261.        
  262.         for (IntIntHolder itemHolder : holder.getItems())
  263.         {
  264.             final L2Item item = ItemData.getInstance().getTemplate(itemHolder.getId());
  265.            
  266.             String itemBlock = HtmlTemplateLoader.getInstance().getContent("skillSellerItem");
  267.            
  268.             itemBlock = itemBlock.replaceAll("%icon%", item.getIcon());
  269.             itemBlock = itemBlock.replace("%name%", item.getName());
  270.             itemBlock = itemBlock.replace("%amount%", StringUtil.formatNumber(itemHolder.getVal()));
  271.            
  272.             sb.append(itemBlock);
  273.         }
  274.        
  275.         return sb.toString();
  276.     }
  277.    
  278.     private String getContent(L2PcInstance player, List<SkillSellerHolder> list, String skillType)
  279.     {
  280.         if (list.isEmpty())
  281.         {
  282.             return "No more skills to learn.";
  283.         }
  284.        
  285.         String block = "";
  286.        
  287.         StringBuilder sb = new StringBuilder();
  288.        
  289.         for (SkillSellerHolder holder : list)
  290.         {
  291.             final int id = holder.getSkillId();
  292.             final int lvl = holder.getSkillLevel();
  293.            
  294.             final boolean isNoblesse = player.isNoble();
  295.            
  296.             final int maxLv = SkillData.getInstance().getMaxLevel(id);
  297.             block = HtmlTemplateLoader.getInstance().getContent("skillSellerList");
  298.            
  299.             block = block.replaceAll("%icon%", SkillIconData.getInstance().getIcon(holder.getSkillId()));
  300.             block = block.replace("%name%", holder.getName());
  301.             block = block.replaceAll("%lvl%", String.valueOf(holder.getSkillLevel()));
  302.             block = block.replace("%skillType%", (SkillData.getInstance().getInfo(id, lvl).isPassive() ? "Passive" : "Active") + " Skill");
  303.             block = block.replace("%id%", String.valueOf(holder.getSkillId()));
  304.             block = block.replace("%cat%", skillType);
  305.             block = block.replace("%reqNoble%", String.valueOf(isNoblesse ? 1 : 0));
  306.             block = block.replace("%reqSp%", String.valueOf(holder.getRequiredSp()));
  307.             block = block.replace("%maxlv%", String.valueOf(maxLv));
  308.            
  309.             sb.append(block);
  310.         }
  311.        
  312.         return sb.toString();
  313.     }
  314. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement