Evanth3

Untitled

Jul 16th, 2024
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 18.87 KB | None | 0 0
  1. import gr.sr.aioItem.runnable.TransformFinalizer;
  2. import gr.sr.configsEngine.configs.impl.AioItemsConfigs;
  3. import gr.sr.configsEngine.configs.impl.CustomNpcsConfigs;
  4. import gr.sr.main.Conditions;
  5. import gr.sr.main.TopListsLoader;
  6. import l2r.Config;
  7. import l2r.gameserver.ThreadPoolManager;
  8. import l2r.gameserver.cache.HtmCache;
  9. import l2r.gameserver.data.sql.CharNameTable;
  10. import l2r.gameserver.data.sql.ClanTable;
  11. import l2r.gameserver.data.xml.impl.*;
  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.Elementals;
  18. import l2r.gameserver.model.L2Augmentation;
  19. import l2r.gameserver.model.actor.FakePc;
  20. import l2r.gameserver.model.actor.L2Npc;
  21. import l2r.gameserver.model.actor.instance.L2PcInstance;
  22. import l2r.gameserver.model.actor.templates.L2NpcTemplate;
  23. import l2r.gameserver.model.holders.IntIntHolder;
  24. import l2r.gameserver.model.holders.SkillHolder;
  25. import l2r.gameserver.model.holders.SkillSellerHolder;
  26. import l2r.gameserver.model.itemcontainer.Inventory;
  27. import l2r.gameserver.model.items.L2Henna;
  28. import l2r.gameserver.model.items.L2Item;
  29. import l2r.gameserver.model.items.instance.L2ItemInstance;
  30. import l2r.gameserver.model.items.type.CrystalType;
  31. import l2r.gameserver.model.punishment.PunishmentAffect;
  32. import l2r.gameserver.model.punishment.PunishmentTask;
  33. import l2r.gameserver.model.punishment.PunishmentType;
  34. import l2r.gameserver.model.skills.L2Skill;
  35. import l2r.gameserver.network.SystemMessageId;
  36. import l2r.gameserver.network.serverpackets.*;
  37. import l2r.gameserver.util.Util;
  38. import org.slf4j.LoggerFactory;
  39.  
  40. import java.util.List;
  41. import java.util.logging.Logger;
  42.  
  43. /**
  44.  * @author -=DoctorNo=- Version 3.3 Last Edit: 19-10-2012
  45.  */
  46. public final class L2AugmentNpcInstance extends L2Npc
  47. {
  48.  
  49.     private static final String ROOT = "data/html/sunrise/TopNpc/";
  50.     private static final String CHANGE_NAME = "data/html/sunrise/TopNpc/ChangeName/";
  51.     private static final String CHANGE_CLAN_NAME = "data/html/sunrise/TopNpc/ChangeClanName/";
  52.     private static final String ADD_ATTRIBUTES = "data/html/sunrise/TopNpc/AddAttributes/";
  53.     private static final String CHANGE_GENDER = "data/html/sunrise/TopNpc/ChangeGender/";
  54.     private static final String ADD_DYES = "data/html/sunrise/TopNpc/AddDyes/";
  55.     private static final String REMOVE_DYES = "data/html/sunrise/TopNpc/RemoveDyes/";
  56.     private static Logger _log = (Logger) LoggerFactory.getLogger(L2AugmentNpcInstance.class);
  57.  
  58.     @Override
  59.     public void showChatWindow(L2PcInstance player)
  60.     {
  61.         player.sendPacket(ActionFailed.STATIC_PACKET);
  62.         String html = HtmCache.getInstance().getHtm(player, player.getHtmlPrefix(), ROOT + "main.htm");
  63.         html = html.replace("%name%", player.getName());
  64.         html = html.replace("%objectId%", String.valueOf(getObjectId()));
  65.         Util.sendCBHtml(player, html);
  66.     }
  67.  
  68.     public L2AugmentNpcInstance(L2NpcTemplate template)
  69.     {
  70.         super(template);
  71.         setInstanceType(InstanceType.L2AugmentNpcInstance);
  72.         FakePc fpc = getFakePc();
  73.         if (fpc != null)
  74.         {
  75.             setTitle(fpc.title);
  76.         }
  77.  
  78.     }
  79.  
  80.     /**
  81.      * Method to send the html to char
  82.      *
  83.      * @param player
  84.      * @param html
  85.      */
  86.     public void sendPacket(L2PcInstance player, String html)
  87.     {
  88.         NpcHtmlMessage msg = new NpcHtmlMessage(getObjectId());
  89.         msg.setFile(player, player.getHtmlPrefix(), "/data/html/sunrise/TopNpc/" + html);
  90.         msg.replace("%objectId%", String.valueOf(getObjectId()));
  91.         player.sendPacket(msg);
  92.     }
  93.  
  94.  
  95.     /**
  96.      * Method to manage all player bypasses
  97.      *
  98.      * @param player
  99.      * @param command
  100.      */
  101.     @Override
  102.     public void onBypassFeedback(final L2PcInstance player, String command)
  103.     {
  104.         final String skillType = command.split("_")[1];
  105.  
  106.         // No null pointers
  107.         if (player == null)
  108.         {
  109.             return;
  110.         }
  111.  
  112.         if (!Conditions.checkPlayerConditions(player))
  113.         {
  114.             return;
  115.         }
  116.  
  117.         if (command.startsWith("changeName"))
  118.         {
  119.             changeName(player, command);
  120.  
  121.             player.sendPacket(ActionFailed.STATIC_PACKET);
  122.             String html = HtmCache.getInstance().getHtm(player, player.getHtmlPrefix(), CHANGE_NAME + "main.htm");
  123.             html = html.replace("%name%", player.getName());
  124.             html = html.replace("%objectId%", String.valueOf(getObjectId()));
  125.             Util.sendCBHtml(player, command);
  126.             return;
  127.         }
  128.         if (command.startsWith("changeClanName"))
  129.         {
  130.             changeClanName(player, command);
  131.  
  132.             player.sendPacket(ActionFailed.STATIC_PACKET);
  133.             String html = HtmCache.getInstance().getHtm(player, player.getHtmlPrefix(), CHANGE_CLAN_NAME + "main.htm");
  134.             html = html.replace("%name%", player.getName());
  135.             html = html.replace("%objectId%", String.valueOf(getObjectId()));
  136.             Util.sendCBHtml(player, command);
  137.             return;
  138.         }
  139.         if (command.startsWith("addAttributes"))
  140.         {
  141.             addAttributes(player, command);
  142.  
  143.             player.sendPacket(ActionFailed.STATIC_PACKET);
  144.             String html = HtmCache.getInstance().getHtm(player, player.getHtmlPrefix(), ADD_ATTRIBUTES + "main.htm");
  145.             html = html.replace("%name%", player.getName());
  146.             html = html.replace("%objectId%", String.valueOf(getObjectId()));
  147.             Util.sendCBHtml(player, command);
  148.             return;
  149.         }
  150.         if (command.startsWith("changeGender"))
  151.         {
  152.             changeGender(player, command);
  153.  
  154.             player.sendPacket(ActionFailed.STATIC_PACKET);
  155.             String html = HtmCache.getInstance().getHtm(player, player.getHtmlPrefix(), CHANGE_GENDER + "main.htm");
  156.             html = html.replace("%name%", player.getName());
  157.             html = html.replace("%objectId%", String.valueOf(getObjectId()));
  158.             Util.sendCBHtml(player, command);
  159.             return;
  160.         }
  161.         if (command.startsWith("symbol"))
  162.         {
  163.             if (command.startsWith("addDies"))
  164.             {
  165.                 addDyes(player, command);
  166.  
  167.                 player.sendPacket(ActionFailed.STATIC_PACKET);
  168.                 String html = HtmCache.getInstance().getHtm(player, player.getHtmlPrefix(), ADD_DYES + "main.htm");
  169.                 html = html.replace("%name%", player.getName());
  170.                 html = html.replace("%objectId%", String.valueOf(getObjectId()));
  171.                 Util.sendCBHtml(player, command);
  172.                 return;
  173.             }
  174.  
  175.             else if (command.startsWith("removeDies"))
  176.             {
  177.                 removeDyes(player, command);
  178.  
  179.                 player.sendPacket(ActionFailed.STATIC_PACKET);
  180.                 String html = HtmCache.getInstance().getHtm(player, player.getHtmlPrefix(), REMOVE_DYES + "main.htm");
  181.                 html = html.replace("%name%", player.getName());
  182.                 html = html.replace("%objectId%", String.valueOf(getObjectId()));
  183.                 Util.sendCBHtml(player, command);
  184.                 return;
  185.             }
  186.         }
  187.     }
  188.  
  189.     private void addDyes(L2PcInstance player, String command)
  190.     {
  191.         List<L2Henna> tato = HennaData.getInstance().getHennaList(player.getClassId());
  192.         player.sendPacket(new HennaEquipList(player, tato));
  193.     }
  194.  
  195.     private void removeDyes(L2PcInstance player, String command)
  196.     {
  197.         boolean hasHennas = false;
  198.  
  199.         for (int i = 1; i <= 3; i++)
  200.         {
  201.             L2Henna henna = player.getHennaEx().getHenna(i);
  202.  
  203.             if (henna != null)
  204.             {
  205.                 hasHennas = true;
  206.             }
  207.         }
  208.         if (hasHennas)
  209.         {
  210.             player.sendPacket(new HennaRemoveList(player));
  211.         }
  212.         else
  213.         {
  214.             player.sendMessage("You do not have dyes.");
  215.         }
  216.     }
  217.  
  218.     private void changeGender(L2PcInstance player, String command)
  219.     {
  220.         String itemName = ItemData.getInstance().getTemplate(Config.CHANGE_GENDER_CUSTOM_NPC_COST_ID).getName();
  221.  
  222.         long count = Config.CHANGE_GENDER_CUSTOM_NPC_COST_AMOUNT;
  223.  
  224.         if (command.startsWith("changeGender"))
  225.         {
  226.             if (!player.destroyItemByItemId("", Config.CHANGE_GENDER_CUSTOM_NPC_COST_ID, count, player, false))
  227.             {
  228.                 player.sendMessage("You need " + Config.CHANGE_GENDER_CUSTOM_NPC_COST_AMOUNT + " " + itemName);
  229.                 return;
  230.             }
  231.         }
  232.  
  233.         player.getAppearance().setSex(player.getAppearance().getSex() ? false : true);
  234.         player.sendMessage("Your gender has been changed.");
  235.         player.broadcastUserInfo();
  236.         // Transform-untransorm player quickly to force the client to reload the character textures
  237.         TransformData.getInstance().transformPlayer(105, player);
  238.         player.setSkillCast(ThreadPoolManager.getInstance().scheduleGeneral(new TransformFinalizer(player), 200));
  239.     }
  240.  
  241.     private void addAttributes(L2PcInstance player, String command)
  242.     {
  243.         int armorType = -1;
  244.  
  245.         if (command.startsWith("elementhead"))
  246.         {
  247.             armorType = Inventory.PAPERDOLL_HEAD;
  248.         }
  249.         else if (command.startsWith("elementchest"))
  250.         {
  251.             armorType = Inventory.PAPERDOLL_CHEST;
  252.         }
  253.         else if (command.startsWith("elementgloves"))
  254.         {
  255.             armorType = Inventory.PAPERDOLL_GLOVES;
  256.         }
  257.         else if (command.startsWith("elementboots"))
  258.         {
  259.             armorType = Inventory.PAPERDOLL_FEET;
  260.         }
  261.         else if (command.startsWith("elementlegs"))
  262.         {
  263.             armorType = Inventory.PAPERDOLL_LEGS;
  264.         }
  265.         else if (command.startsWith("elementwep"))
  266.         {
  267.             armorType = Inventory.PAPERDOLL_RHAND;
  268.         }
  269.  
  270.         int elementWeaponValue = AioItemsConfigs.ELEMENT_VALUE_WEAPON;
  271.         int elementArmorValue = AioItemsConfigs.ELEMENT_VALUE_ARMOR;
  272.  
  273.         String itemName = ItemData.getInstance().getTemplate(Config.AUGMENT_CUSTOM_NPC_COST_ID).getName();
  274.  
  275.         long count = Config.AUGMENT_CUSTOM_NPC_COST_AMOUNT;
  276.  
  277.         if (!player.destroyItemByItemId("", Config.AUGMENT_CUSTOM_NPC_COST_ID, count, player, false))
  278.         {
  279.             L2ItemInstance parmorInstance = player.getInventory().getPaperdollItem(armorType);
  280.             if ((parmorInstance != null) && (parmorInstance.getLocationSlot() == armorType))
  281.             {
  282.                 String[] types = command.split(" ");
  283.                 byte elementtoAdd = Elementals.getElementId(types[1]);
  284.                 byte opositeElement = Elementals.getOppositeElement(elementtoAdd);
  285.                 Elementals oldElement = parmorInstance.getElemental(elementtoAdd);
  286.  
  287.                 switch (parmorInstance.getItem().getCrystalType())
  288.                 {
  289.                     case NONE:
  290.                     case A:
  291.                     case B:
  292.                     case C:
  293.                     case D:
  294.                         player.sendMessage("Invalid item grade.");
  295.                         return;
  296.                     default:
  297.                         break;
  298.                 }
  299.  
  300.                 if (!AioItemsConfigs.ELEMENT_ALLOW_MORE_ATT_FOR_WEAPONS)
  301.                 {
  302.                     if ((parmorInstance.isWeapon() && (parmorInstance.getElementals() != null)) || (parmorInstance.isArmor() && (oldElement != null) && (parmorInstance.getElementals() != null) && (parmorInstance.getElementals().length >= 3)))
  303.                     {
  304.                         player.sendPacket(SystemMessageId.ANOTHER_ELEMENTAL_POWER_ALREADY_ADDED);
  305.                         return;
  306.                     }
  307.                 }
  308.  
  309.                 if (parmorInstance.isWeapon())
  310.                 {
  311.                     if ((oldElement != null) && (oldElement.getValue() >= elementWeaponValue))
  312.                     {
  313.                         player.sendMessage("You cannot add same attribute to item!");
  314.                         return;
  315.                     }
  316.  
  317.                     if (parmorInstance.getElementals() != null)
  318.                     {
  319.                         for (Elementals elm : parmorInstance.getElementals())
  320.                         {
  321.                             if (parmorInstance.isEquipped())
  322.                             {
  323.                                 parmorInstance.getElemental(elm.getElement()).removeBonus(player);
  324.                             }
  325.                             parmorInstance.clearElementAttr(elm.getElement());
  326.                         }
  327.                     }
  328.                 }
  329.                 else if (parmorInstance.isArmor())
  330.                 {
  331.                     if (parmorInstance.getElementals() != null)
  332.                     {
  333.                         for (Elementals elm : parmorInstance.getElementals())
  334.                         {
  335.                             if (elm.getElement() == opositeElement)
  336.                             {
  337.                                 player.sendMessage("You cannot add opposite attribute to item!");
  338.                                 return;
  339.                             }
  340.                             if ((elm.getElement() == elementtoAdd) && (elm.getValue() >= elementArmorValue))
  341.                             {
  342.                                 player.sendMessage("You cannot add same attribute to item!");
  343.                                 return;
  344.                             }
  345.                         }
  346.                     }
  347.                 }
  348.  
  349.                 player.getInventory().unEquipItemInSlot(armorType);
  350.                 parmorInstance.setElementAttr(elementtoAdd, parmorInstance.isWeapon() ? elementWeaponValue : elementArmorValue);
  351.                 player.getInventory().equipItem(parmorInstance);
  352.                 player.sendMessage("Successfully added " + types[1] + " attribute to your item.");
  353.  
  354.                 InventoryUpdate iu = new InventoryUpdate();
  355.                 iu.addModifiedItem(parmorInstance);
  356.                 player.sendInventoryUpdate(iu);
  357.             }
  358.             else
  359.             {
  360.                 player.sendMessage("You cannot attribute items that are not equipped!");
  361.             }
  362.         }
  363.         player.sendMessage("You need " + Config.AUGMENT_CUSTOM_NPC_COST_AMOUNT + " " + itemName);
  364.     }
  365.  
  366.  
  367.     private void changeClanName(L2PcInstance player, String command)
  368.     {
  369.         try
  370.         {
  371.             String val = command.substring(15);
  372.             if ((player.getClan() == null) || (!player.isClanLeader()))
  373.             {
  374.                 player.sendPacket(SystemMessageId.YOU_ARE_NOT_AUTHORIZED_TO_DO_THAT);
  375.                 return;
  376.             }
  377.             if (!Util.isAlphaNumeric(val))
  378.             {
  379.                 player.sendPacket(SystemMessageId.CLAN_NAME_INCORRECT);
  380.                 return;
  381.             }
  382.  
  383.             String itemName = ItemData.getInstance().getTemplate(Config.CHANGE_CLAN_NAME_CUSTOM_NPC_COST_ID).getName();
  384.  
  385.             long count = Config.CHANGE_CLAN_NAME_CUSTOM_NPC_COST_AMOUNT;
  386.  
  387.             if (!player.destroyItemByItemId("", Config.CHANGE_CLAN_NAME_CUSTOM_NPC_COST_ID, count, player, false))
  388.             {
  389.                 player.sendMessage("You need " + Config.CHANGE_CLAN_NAME_CUSTOM_NPC_COST_AMOUNT + " " + itemName);
  390.                 return;
  391.             }
  392.  
  393.             if (ClanTable.getInstance().getClanByName(val) != null)
  394.             {
  395.                 player.sendMessage("Warning, clan name " + val + " already exists.");
  396.                 return;
  397.             }
  398.  
  399.             player.getClan().setName(val);
  400.             player.getClan().updateClanNameInDB();
  401.             player.sendMessage("Your clan name has been changed to " + val);
  402.             player.broadcastUserInfo();
  403.  
  404.             if (player.isInParty())
  405.             {
  406.                 // Delete party window for other party members
  407.                 player.getParty().broadcastToPartyMembers(player, new PartySmallWindowDeleteAll());
  408.                 for (L2PcInstance member : player.getParty().getMembers())
  409.                 {
  410.                     // And re-add
  411.                     if (member != player)
  412.                     {
  413.                         member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
  414.                     }
  415.                 }
  416.             }
  417.             if (player.getClan() != null)
  418.             {
  419.                 player.getClan().broadcastClanStatus();
  420.             }
  421.         }
  422.         catch (StringIndexOutOfBoundsException e)
  423.         {
  424.             // Case of empty character name
  425.             player.sendMessage("Clan name box cannot be empty.");
  426.         }
  427.     }
  428.  
  429.     private void changeName(L2PcInstance player, String command)
  430.     {
  431.         try
  432.         {
  433.             String val = command.substring(11);
  434.  
  435.             if (!Util.isAlphaNumeric(val))
  436.             {
  437.                 player.sendMessage("Invalid character name.");
  438.                 return;
  439.             }
  440.  
  441.             if (CharNameTable.getInstance().getIdByName(val) > 0)
  442.             {
  443.                 player.sendMessage("Warning, name " + val + " already exists.");
  444.                 return;
  445.             }
  446.             player.destroyItemByItemId("Name Change", Config.CHANGE_NAME_CUSTOM_NPC_COST_ID, Config.CHANGE_NAME_CUSTOM_NPC_AMOUNT, player, true);
  447.             player.setName(val);
  448.             player.getAppearance().setVisibleName(val);
  449.             player.store();
  450.  
  451.             player.sendMessage("Your name has been changed to " + val);
  452.             player.broadcastUserInfo();
  453.  
  454.             if (player.isInParty())
  455.             {
  456.                 // Delete party window for other party members
  457.                 player.getParty().broadcastToPartyMembers(player, new PartySmallWindowDeleteAll());
  458.                 for (L2PcInstance member : player.getParty().getMembers())
  459.                 {
  460.                     // And re-add
  461.                     if (member != player)
  462.                     {
  463.                         member.sendPacket(new PartySmallWindowAll(member, player.getParty()));
  464.                     }
  465.                 }
  466.             }
  467.             if (player.getClan() != null)
  468.             {
  469.                 player.getClan().broadcastClanStatus();
  470.             }
  471.         }
  472.         catch (StringIndexOutOfBoundsException e)
  473.         {
  474.             // Case of empty character name
  475.             player.sendMessage("Player name box cannot be empty.");
  476.         }
  477.     }
  478.  
  479.     private boolean weaponCheck(L2PcInstance player, L2ItemInstance weapon)
  480.     {
  481.         if (weapon.getItem().getItemGrade() == CrystalType.S)
  482.         {
  483.             return true;
  484.         }
  485.         if (weapon.getItem().getItemGrade() == CrystalType.S80)
  486.         {
  487.             return true;
  488.         }
  489.         if (weapon.getItem().getItemGrade() == CrystalType.S84)
  490.         {
  491.             return true;
  492.         }
  493.         return false;
  494.     }
  495. }
Advertisement
Add Comment
Please, Sign In to add comment