Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 26th, 2012  |  syntax: Java  |  size: 11.23 KB  |  hits: 13  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /*
  2.  * This program is free software; you can redistribute it and/or modify
  3.  * it under the terms of the GNU General Public License as published by
  4.  * the Free Software Foundation; either version 2, or (at your option)
  5.  * any later version.
  6.  *
  7.  * This program is distributed in the hope that it will be useful,
  8.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  9.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  10.  * GNU General Public License for more details.
  11.  *
  12.  * You should have received a copy of the GNU General Public License
  13.  * along with this program; if not, write to the Free Software
  14.  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  15.  * 02111-1307, USA.
  16.  *
  17.  * http://www.gnu.org/copyleft/gpl.html
  18.  */
  19. package com.l2jfrozen.gameserver.model.actor.instance;
  20.  
  21. import com.l2jfrozen.Config;
  22. import com.l2jfrozen.gameserver.ai.CtrlIntention;
  23. import com.l2jfrozen.gameserver.datatables.sql.CharTemplateTable;
  24. import com.l2jfrozen.gameserver.datatables.sql.ItemTable;
  25. import com.l2jfrozen.gameserver.model.base.ClassId;
  26. import com.l2jfrozen.gameserver.model.quest.Quest;
  27. import com.l2jfrozen.gameserver.network.SystemMessageId;
  28. import com.l2jfrozen.gameserver.network.serverpackets.*;
  29. import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
  30. import javolution.text.TextBuilder;
  31.  
  32. /**
  33.  * This class ...
  34.  *
  35.  * @version $Revision: 1.4.2.1.2.7 $ $Date: 2005/03/27 15:29:32 $
  36.  */
  37.  
  38. public final class L2ClassMasterInstance extends L2FolkInstance
  39. {
  40.     private static L2ClassMasterInstance _instance;
  41.  
  42.     public L2ClassMasterInstance(int objectId, L2NpcTemplate template)
  43.     {
  44.         super(objectId, template);
  45.     }
  46.  
  47.     @Override
  48.     public void onAction(L2PcInstance player)
  49.     {
  50.         if (!canTarget(player)) return;
  51.  
  52.         // Check if the L2PcInstance already target the L2NpcInstance
  53.         if (getObjectId() != player.getTargetId())
  54.         {
  55.             // Set the target of the L2PcInstance player
  56.             player.setTarget(this);
  57.  
  58.             // Send a Server->Client packet MyTargetSelected to the L2PcInstance player
  59.             player.sendPacket(new MyTargetSelected(getObjectId(), 0));
  60.  
  61.             // Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client
  62.             player.sendPacket(new ValidateLocation(this));
  63.         }
  64.         else
  65.         {
  66.             if (!canInteract(player))
  67.             {
  68.                 player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
  69.                 return;
  70.             }
  71.  
  72.             NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  73.             TextBuilder sb = new TextBuilder();
  74.             sb.append("<html><body>");
  75.             sb.append(getName()+":<br>");
  76.             sb.append("<br>");
  77.  
  78.             ClassId classId = player.getClassId();
  79.             int level = player.getLevel();
  80.             int jobLevel = classId.level();
  81.  
  82.             int newJobLevel = jobLevel + 1;
  83.  
  84.             if ((((level >= 20 && jobLevel == 0 ) || (level >= 40 && jobLevel == 1 ) || (level >= 76 && jobLevel == 2))
  85.                     && Config.CLASS_MASTER_SETTINGS.isAllowed(newJobLevel))
  86.                     || Config.CLASS_MASTER_STRIDER_UPDATE)
  87.             {
  88.                 if (((level >= 20 && jobLevel == 0 ) || (level >= 40 && jobLevel == 1 ) || (level >= 76 && jobLevel == 2))
  89.                         && Config.CLASS_MASTER_SETTINGS.isAllowed(newJobLevel))
  90.                 {
  91.                     sb.append("You can change your occupation to following:<br>");
  92.  
  93.                     for (ClassId child : ClassId.values())
  94.                         if (child.childOf(classId) && child.level() == newJobLevel)
  95.                             sb.append("<br><a action=\"bypass -h npc_" + getObjectId() + "_change_class " + (child.getId()) + "\"> " + CharTemplateTable.getClassNameById(child.getId()) + "</a>");
  96.  
  97.                     if (Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel) != null &&
  98.                             Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).size() > 0)
  99.                     {
  100.                         sb.append("<br><br>Item(s) required for class change:");
  101.                         sb.append("<table width=270>");
  102.                         for(Integer _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).keySet())
  103.                         {
  104.                             int _count = Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).get(_itemId);
  105.                             sb.append("<tr><td><font color=\"LEVEL\">"+_count+"</font></td><td>"+ItemTable.getInstance().getTemplate(_itemId).getName()+"</td></tr>");
  106.                         }
  107.                         sb.append("</table>");
  108.                     }
  109.                 }
  110.  
  111.                 if (Config.CLASS_MASTER_STRIDER_UPDATE)
  112.                 {
  113.                     sb.append("<table width=270>");
  114.                     sb.append("<tr><td><br></td></tr>");
  115.                     sb.append("<tr><td><a action=\"bypass -h npc_"+getObjectId()+"_upgrade_hatchling\">Upgrade Hatchling to Strider</a></td></tr>");
  116.                     sb.append("</table>");
  117.                 }
  118.                 sb.append("<br>");
  119.             }
  120.             else
  121.             {
  122.                 switch (jobLevel)
  123.                 {
  124.                     case 0:
  125.                         if (Config.CLASS_MASTER_SETTINGS.isAllowed(1))
  126.                             sb.append("Come back here when you reached level 20 to change your class.<br>");
  127.                         else
  128.                         if (Config.CLASS_MASTER_SETTINGS.isAllowed(2))
  129.                             sb.append("Come back after your first occupation change.<br>");
  130.                         else
  131.                         if (Config.CLASS_MASTER_SETTINGS.isAllowed(3))
  132.                             sb.append("Come back after your second occupation change.<br>");
  133.                         else
  134.                             sb.append("I can't change your occupation.<br>");
  135.                         break;
  136.                     case 1:
  137.                         if (Config.CLASS_MASTER_SETTINGS.isAllowed(2))
  138.                             sb.append("Come back here when you reached level 40 to change your class.<br>");
  139.                         else
  140.                         if (Config.CLASS_MASTER_SETTINGS.isAllowed(3))
  141.                             sb.append("Come back after your second occupation change.<br>");
  142.                         else
  143.                             sb.append("I can't change your occupation.<br>");
  144.                         break;
  145.                     case 2:
  146.                         if (Config.CLASS_MASTER_SETTINGS.isAllowed(3))
  147.                             sb.append("Come back here when you reached level 76 to change your class.<br>");
  148.                         else
  149.                             sb.append("I can't change your occupation.<br>");
  150.                         break;
  151.                     case 3:
  152.                         sb.append("There is no class change available for you anymore.<br>");
  153.                         break;
  154.                 }
  155.                 sb.append("<br>");
  156.             }
  157.  
  158.             for (Quest q : Quest.findAllEvents())
  159.                 sb.append("Event: <a action=\"bypass -h Quest " + q.getName() + "\">" + q.getDescr() + "</a><br>");
  160.             sb.append("</body></html>");
  161.             html.setHtml(sb.toString());
  162.             player.sendPacket(html);
  163.  
  164.         }
  165.         player.sendPacket(new ActionFailed());
  166.     }
  167.  
  168.     @Override
  169.     public void onBypassFeedback(L2PcInstance player, String command)
  170.     {
  171.         if (command.startsWith("change_class"))
  172.         {
  173.             int val = Integer.parseInt(command.substring(13));
  174.  
  175.             ClassId classId = player.getClassId();
  176.             ClassId newClassId = ClassId.values()[val];
  177.  
  178.             int level = player.getLevel();
  179.             int jobLevel = classId.level();
  180.             int newJobLevel = newClassId.level();
  181.  
  182.             // -- exploit prevention
  183.             // prevents changing if config option disabled
  184.             if (!Config.CLASS_MASTER_SETTINGS.isAllowed(newJobLevel)) return;
  185.  
  186.             // prevents changing to class not in same class tree
  187.             if (!newClassId.childOf(classId)) return;
  188.  
  189.             // prevents changing between same level jobs
  190.             if(newJobLevel != jobLevel + 1) return;
  191.  
  192.             // check for player level
  193.             if (level < 20 && newJobLevel > 1) return;
  194.             if (level < 40 && newJobLevel > 2) return;
  195.             if (level < 76 && newJobLevel > 3) return;
  196.             // -- prevention ends
  197.  
  198.             // check if player have all required items for class transfer
  199.             for(Integer _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).keySet())
  200.             {
  201.                 int _count = Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).get(_itemId);
  202.                 if (player.getInventory().getInventoryItemCount(_itemId, -1) < _count)
  203.                 {
  204.                     player.sendPacket(new SystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
  205.                     return;
  206.                 }
  207.             }
  208.  
  209.             // get all required items for class transfer
  210.             for(Integer _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).keySet())
  211.             {
  212.                 int _count = Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).get(_itemId);
  213.                 player.destroyItemByItemId("ClassMaster", _itemId, _count, player, true);
  214.             }
  215.  
  216.             // reward player with items
  217.             for(Integer _itemId : Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).keySet())
  218.             {
  219.                 int _count = Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).get(_itemId);
  220.                 player.addItem("ClassMaster", _itemId, _count, player, true);
  221.             }
  222.  
  223.             changeClass(player, val);
  224.  
  225.             player.rewardSkills();
  226.  
  227.             if(newJobLevel == 3)
  228.             {
  229.                 player.sendPacket(new SystemMessage(SystemMessageId.THIRD_CLASS_TRANSFER));
  230.             }
  231.             else
  232.             {
  233.                 player.sendPacket(new SystemMessage(SystemMessageId.CLASS_TRANSFER));
  234.             }
  235.  
  236.             NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
  237.             TextBuilder sb = new TextBuilder();
  238.             sb.append("<html><body>");
  239.             sb.append(getName()+":<br>");
  240.             sb.append("<br>");
  241.             sb.append("You have now become a <font color=\"LEVEL\">" + CharTemplateTable.getClassNameById(player.getClassId().getId()) + "</font>.");
  242.             sb.append("</body></html>");
  243.             html.setHtml(sb.toString());
  244.             player.sendPacket(html);
  245.             player.refreshOverloaded();
  246.             player.refreshExpertisePenalty();
  247.         }
  248.  
  249.     }
  250.  
  251.     private void changeClass(L2PcInstance player, int val)
  252.     {
  253.         player.setClassId(val);
  254.  
  255.         if (player.isSubClassActive()) player.getSubClasses().get(player.getClassIndex()).setClassId(player.getActiveClass());
  256.         else player.setBaseClass(player.getActiveClass());
  257.         player.broadcastUserInfo();
  258.     }
  259.  
  260.     public static L2ClassMasterInstance getInstance()
  261.     {
  262.  
  263.         return _instance;
  264.  
  265.     }
  266. }