Эвент менеджеры (Коты)

Теги:
 
+
-
edit
 

Empire

новичок
Короче изменяю кота (менеджера), что бы он мог обнулять и всякое такое с чаром делать

Произошла проблема - как реализовать счётчик обнулений? т.е. за счёт чего? реализовывал через скилл, но часто происходит ошибка SQL (не пишет в базу просто, а тока находиться в кеше на сервере)
Прошу совета как поправить...

Код кота:
code text
  1. import javolution.lang.TextBuilder;
  2. import net.sf.l2j.Config;
  3. import net.sf.l2j.gameserver.Announcements;
  4. import net.sf.l2j.gameserver.CharTemplateTable;
  5. import net.sf.l2j.gameserver.SkillTable;
  6. import net.sf.l2j.gameserver.ai.CtrlIntention;
  7. import net.sf.l2j.gameserver.model.Inventory;
  8. import net.sf.l2j.gameserver.model.L2ItemInstance;
  9. import net.sf.l2j.gameserver.model.L2Skill;
  10. import net.sf.l2j.gameserver.model.base.ClassId;
  11. import net.sf.l2j.gameserver.model.quest.Quest;
  12. import net.sf.l2j.gameserver.serverpackets.ActionFailed;
  13. import net.sf.l2j.gameserver.serverpackets.InventoryUpdate;
  14. import net.sf.l2j.gameserver.serverpackets.MyTargetSelected;
  15. import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage;
  16. import net.sf.l2j.gameserver.serverpackets.SystemMessage;
  17. import net.sf.l2j.gameserver.serverpackets.ValidateLocation;
  18. import net.sf.l2j.gameserver.templates.L2NpcTemplate;
  19.  
  20.  
  21. /**
  22.  * This class ...
  23.  *
  24.  * @version $Revision: 1.4.2.1.2.7 $ $Date: 2005/03/27 15:29:32 $
  25.  */
  26. public final class L2ClassMasterInstance extends L2FolkInstance
  27. {
  28.    
  29.     /**
  30.      * @param template
  31.      */
  32.     public L2ClassMasterInstance(int objectId, L2NpcTemplate template)
  33.     {
  34.         super(objectId, template);
  35.     }
  36.    
  37.     public void onAction(L2PcInstance player)
  38.     {
  39.         if (getObjectId() != player.getTargetId())
  40.         {
  41.             player.getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE, null);
  42.            
  43.             player.setTarget(this);
  44.             player.sendPacket(new MyTargetSelected(getObjectId(), player.getLevel() - getLevel()));
  45.             // correct location
  46.             player.sendPacket(new ValidateLocation(this));
  47.         }
  48.         else
  49.         {
  50.             if (!isInsideRadius(player, INTERACTION_DISTANCE, false, false))
  51.             {
  52.                 player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this);
  53.                 return;
  54.             }
  55.            
  56.             NpcHtmlMessage html = new NpcHtmlMessage(1);
  57.             TextBuilder sb = new TextBuilder();
  58.             sb.append("<html><body>");
  59.             sb.append("Жрец магии АДМИНА:<br>");
  60.             sb.append("<br>");
  61.            
  62.             ClassId classId = player.getClassId();
  63.             int level = player.getLevel();
  64.             int lvl = classId.level();
  65.            
  66.             if ((level >= 20 && lvl == 0) || (level >= 40 && lvl == 1) || (level >= 76 && lvl == 2) || (level >= 80 ))
  67.             {
  68.                 if ((lvl == 0 && Config.ALLOW_CLASS_MASTER_1) || (lvl == 1 && Config.ALLOW_CLASS_MASTER_2) || (lvl == 2 && Config.ALLOW_CLASS_MASTER_3))
  69.                 {
  70.                     sb.append("Это список профессий, которые вы можете активировать:<br>");
  71.                     sb.append("<br>");
  72.                     for (ClassId child : ClassId.values())
  73.                         if (child.childOf(classId) && child.level() == lvl+1)
  74.                             sb.append("<a action=\"bypass -h npc_" + getObjectId() + "_change_class " + (child.getId()) + "\">Advance to " + CharTemplateTable.getClassNameById(child.getId()) + "</a><br>");
  75.                     sb.append("<br>");
  76.                 }
  77.                 else
  78.                 {
  79.                     sb.append("Вам доступно обнуление, на кого Вы хотите обнулиться ?:<br>");
  80.                     sb.append("<br>");
  81.                     sb.append("Люди:<br>");
  82.                     sb.append("<a action=\"bypass -h npc_" + getObjectId() + "_change_class " + (0x00) + "\">Advance to " + CharTemplateTable.getClassNameById(0x00) + "</a><br>");
  83.                     sb.append("<br>");
  84.                     sb.append("<a action=\"bypass -h npc_" + getObjectId() + "_change_class " + (0x0a) + "\">Advance to " + CharTemplateTable.getClassNameById(0x0a) + "</a><br>");
  85.                     sb.append("<br>");
  86.                     sb.append("Эльфы:<br>");
  87.                     sb.append("<a action=\"bypass -h npc_" + getObjectId() + "_change_class " + (0x12) + "\">Advance to " + CharTemplateTable.getClassNameById(0x12) + "</a><br>");
  88.                     sb.append("<br>");
  89.                     sb.append("<a action=\"bypass -h npc_" + getObjectId() + "_change_class " + (0x19) + "\">Advance to " + CharTemplateTable.getClassNameById(0x19) + "</a><br>");
  90.                     sb.append("<br>");
  91.                     sb.append("Тёмные Эльфы:<br>");
  92.                     sb.append("<a action=\"bypass -h npc_" + getObjectId() + "_change_class " + (0x1f) + "\">Advance to " + CharTemplateTable.getClassNameById(0x1f) + "</a><br>");
  93.                     sb.append("<br>");
  94.                     sb.append("<a action=\"bypass -h npc_" + getObjectId() + "_change_class " + (0x26) + "\">Advance to " + CharTemplateTable.getClassNameById(0x26) + "</a><br>");
  95.                     sb.append("<br>");
  96.                     sb.append("Орки:<br>");
  97.                     sb.append("<a action=\"bypass -h npc_" + getObjectId() + "_change_class " + (0x2c) + "\">Advance to " + CharTemplateTable.getClassNameById(0x2c) + "</a><br>");
  98.                     sb.append("<br>");
  99.                     sb.append("<a action=\"bypass -h npc_" + getObjectId() + "_change_class " + (0x31) + "\">Advance to " + CharTemplateTable.getClassNameById(0x31) + "</a><br>");
  100.                     sb.append("<br>");
  101.                     sb.append("Гномы:<br>");
  102.                     sb.append("<a action=\"bypass -h npc_" + getObjectId() + "_change_class " + (0x35) + "\">Advance to " + CharTemplateTable.getClassNameById(0x35) + "</a><br>");
  103.                     sb.append("<br>");
  104.                 }
  105.             }
  106.             else
  107.             {
  108.                 switch (lvl)
  109.                 {
  110.                     case 0:
  111.                         sb.append("Возвращайтесь ко мне, когда получите 20 level для прокачки следующего вашего класса (профессии).<br>");
  112.                         break;
  113.                     case 1:
  114.                         sb.append("Возвращайтесь ко мне, когда получите 40 level для прокачки следующего вашего класса (профессии).<br>");
  115.                         break;
  116.                     case 2:
  117.                         sb.append("Возвращайтесь ко мне, когда получите 76 level для прокачки следующего вашего класса (профессии).<br>");
  118.                         break;
  119.                     case 3:
  120.                         sb.append("Этот класс являеться вашей финальной профессией, вы не можете его повысить.<br>");
  121.                         break;
  122.                 }
  123.                 sb.append("<br>");
  124.             }
  125.            
  126.             for (Quest q : Quest.findAllEvents())
  127.                 sb.append("Event: <a action=\"bypass -h Quest " + q.getName() + "\">" + q.getDescr() + "</a><br>");
  128.             sb.append("</body></html>");
  129.             html.setHtml(sb.toString());
  130.             player.sendPacket(html);
  131.            
  132.             player.sendPacket(new ActionFailed());
  133.         }
  134.     }
  135.    
  136.     public void onBypassFeedback(L2PcInstance player, String command)
  137.     {
  138.         if (command.startsWith("change_class"))
  139.         {
  140.             int val = Integer.parseInt(command.substring(13));
  141.             int level = player.getLevel();
  142.             int jobLevel;
  143.             int newJobLevel;
  144.             //int ConObn = 1;
  145.             String mes = "<br>";
  146.            
  147.            
  148.             //ConObn = player.getSkillLevel(11098);
  149.            
  150.             jobLevel = player.getClassId().level();  
  151.             newJobLevel = ClassId.values()[val].level();
  152.          
  153.            
  154.             /*
  155.             if(jobLevel == 3) // no more job changes
  156.             {
  157.                 if (ConObn < 2)
  158.                 {
  159.                     setTarget(player, 4, Inventory.PAPERDOLL_HEAD);
  160.                     setTarget(player, 4, Inventory.PAPERDOLL_CHEST);
  161.                     setTarget(player, 4, Inventory.PAPERDOLL_GLOVES);
  162.                     setTarget(player, 4, Inventory.PAPERDOLL_RHAND);
  163.                     setTarget(player, 4, Inventory.PAPERDOLL_LHAND);
  164.                     setTarget(player, 4, Inventory.PAPERDOLL_LEGS);
  165.                     setTarget(player, 4, Inventory.PAPERDOLL_FEET);
  166.                     setTarget(player, 4, Inventory.PAPERDOLL_BACK);
  167.                     setTarget(player, 4, Inventory.PAPERDOLL_LEAR);
  168.                     setTarget(player, 4, Inventory.PAPERDOLL_REAR);
  169.                     setTarget(player, 4, Inventory.PAPERDOLL_LFINGER);
  170.                     setTarget(player, 4, Inventory.PAPERDOLL_RFINGER);
  171.                     setTarget(player, 4, Inventory.PAPERDOLL_NECK);
  172.                     setTarget(player, 4, Inventory.PAPERDOLL_UNDER);
  173.                     ConObn = 1;
  174.                     mes = ("Так как это ваше первое обнуление вся одежда и оружие, которое на вас одето - было заточено на +4.<br>");
  175.                     L2Skill skillAdd = SkillTable.getInstance().getInfo(11098,(ConObn + 1));
  176.                     player.removeExpAndSp((player.getExp() - 1), player.getSp());
  177.                     player.addSkill(skillAdd);
  178.                     Announcements sys = new Announcements();
  179.                     sys.handleAnnounce("У нас есть впервые обнулённый " + player.getName(), 15);
  180.                 }
  181.                 else
  182.                 if (ConObn >= 2 && ConObn < 5)
  183.                 {
  184.                     setTarget(player, 2, Inventory.PAPERDOLL_HEAD);
  185.                     setTarget(player, 2, Inventory.PAPERDOLL_CHEST);
  186.                     setTarget(player, 2, Inventory.PAPERDOLL_GLOVES);
  187.                     setTarget(player, 2, Inventory.PAPERDOLL_RHAND);
  188.                     setTarget(player, 2, Inventory.PAPERDOLL_LHAND);
  189.                     setTarget(player, 2, Inventory.PAPERDOLL_LEGS);
  190.                     setTarget(player, 2, Inventory.PAPERDOLL_FEET);
  191.                     setTarget(player, 2, Inventory.PAPERDOLL_BACK);
  192.                     setTarget(player, 2, Inventory.PAPERDOLL_LEAR);
  193.                     setTarget(player, 2, Inventory.PAPERDOLL_REAR);
  194.                     setTarget(player, 2, Inventory.PAPERDOLL_LFINGER);
  195.                     setTarget(player, 2, Inventory.PAPERDOLL_RFINGER);
  196.                     setTarget(player, 2, Inventory.PAPERDOLL_NECK);
  197.                     setTarget(player, 2, Inventory.PAPERDOLL_UNDER);
  198.                     mes = ("Это ваше " + ConObn + " обнуление - вся одежда и оружие, которое на вас одето - было заточено на +2.<br>");
  199.                     L2Skill skillAdd = SkillTable.getInstance().getInfo(11098,(ConObn + 1));
  200.                     player.removeExpAndSp((player.getExp() - 1), player.getSp());
  201.                     player.addSkill(skillAdd);
  202.                  }
  203.                 else
  204.                 if (ConObn >= 5)
  205.                 {
  206.                     NpcHtmlMessage html = new NpcHtmlMessage(1);
  207.                     TextBuilder sb = new TextBuilder();
  208.                     sb.append("<html><head><body>");
  209.                     sb.append("Вы не можете сейчас иметь больше <font color=\"LEVEL\">" + ConObn + "</font> базовых профессий.");
  210.                     sb.append("<br>");
  211.                     sb.append("Для продолжения обнулений Вам необходимы следующие вещи в инвентаре:<br>");
  212.                     sb.append("</body></html>");
  213.                    
  214.                     html.setHtml(sb.toString());
  215.                     player.sendPacket(html);
  216.                     val = player.getClassIndex();
  217.                 }
  218.             }
  219.             */
  220.            
  221.  
  222.             // prevents changing between same level jobs
  223.             if(newJobLevel == jobLevel) return;
  224.                
  225.             if (level < 20 && newJobLevel > 0) return;
  226.             if (level < 40 && newJobLevel > 1) return;
  227.             if (level < 75 && newJobLevel > 2) return;
  228.             // -- prevention ends
  229.                                              
  230.             changeClass(player, val);
  231.             player.rewardSkills();
  232.             player.setCurrentHpMp(player.getMaxHp(), player.getMaxMp());
  233.            
  234.             if (newJobLevel == 3) player.sendPacket(new SystemMessage(1606)); // system sound 3rd occupation
  235.             else player.sendPacket(new SystemMessage(1308)); // system sound for 1st and 2nd occupation
  236.            
  237.             NpcHtmlMessage html = new NpcHtmlMessage(1);
  238.             TextBuilder sb = new TextBuilder();
  239.             sb.append("<html><head><body>");
  240.             sb.append(mes);
  241.             sb.append("Вы получили профессию <font color=\"LEVEL\">" + CharTemplateTable.getClassNameById(player.getClassId().getId()) + "</font>, поздравляю!");
  242.             sb.append("</body></html>");
  243.            
  244.             html.setHtml(sb.toString());
  245.             player.sendPacket(html);  
  246.         }
  247.         else
  248.         {
  249.             super.onBypassFeedback(player, command);
  250.         }
  251.     }
  252.  
  253.     private void changeClass(L2PcInstance player, int val)
  254.     {
  255.         player.setClassId(val);
  256.        
  257.         if (player.isSubClassActive()) player.getSubClasses().get(player.getClassIndex()).setClassId(
  258.                                                                                                      player.getActiveClass());
  259.         else player.setBaseClass(player.getActiveClass());
  260.        
  261.         player.broadcastUserInfo();
  262.     }
  263.    
  264.    
  265.     private void setTarget(L2PcInstance player, int ench ,int armorType)
  266.     {
  267.             // now we need to find the equipped weapon of the targeted character...
  268.             int curEnchant = 0; // display purposes only
  269.             int dropSlot = armorType;
  270.             boolean canEnchant = false;
  271.             L2ItemInstance parmorInstance = null;
  272.             L2ItemInstance armorToEnchant = null;
  273.            
  274.             // only attempt to enchant if there is a weapon equipped
  275.             if ( canEnchant == false )
  276.             {
  277.                 // check equip
  278.                 parmorInstance = player.getInventory().getPaperdollItem(dropSlot);
  279.                 if (parmorInstance != null && parmorInstance.getEquipSlot() == dropSlot )
  280.                 {      
  281.                     armorToEnchant = parmorInstance;
  282.                     curEnchant = armorToEnchant.getEnchantLevel();
  283.                     canEnchant = true;
  284.                 }
  285.             }
  286.            
  287.             if ( canEnchant == true && armorToEnchant != null )
  288.             {
  289.                 // set enchant value
  290.                 player.getInventory().unEquipItemInSlotAndRecord(dropSlot);
  291.                 parmorInstance.setEnchantLevel((curEnchant + ench));                              
  292.                 player.getInventory().equipItemAndRecord(armorToEnchant);
  293.                
  294.                 InventoryUpdate iu = new InventoryUpdate();
  295.                 iu.addModifiedItem(armorToEnchant);
  296.                 player.sendPacket(iu);
  297.                
  298.                 SystemMessage sm = new SystemMessage(614);
  299.                 sm.addString("Заточена вещь (" + armorToEnchant.getItem().getName() + ") с " + curEnchant + " до " + (ench + curEnchant) + ".");
  300.                 player.sendPacket(sm);
  301.                
  302.             }
  303.             else
  304.             {
  305.                 // no item is equipped
  306.                 // notify admin
  307.                 SystemMessage smA = new SystemMessage(614);
  308.                 smA.addString("Я не могу заточить вещь, так как она отсудствует в слоте одежды чара.");        
  309.                 player.sendPacket(smA);
  310.                 return;
  311.             }
  312.     }
  313.    
  314. }
 
Это сообщение редактировалось 22.02.2007 в 03:10
UA SoulKeeper #22.02.2007 02:49
+
-
edit
 

SoulKeeper

разработчик L2J Fortress

Не вижу сохранения в бд.

И за код без отступов надо бить :)
Разыскивается десятка с два датапакеров :) http://la2.wrk.ru/forum/viewtopic.php?id=50882  
+
-
edit
 

Empire

новичок
SoulKeeper> Не вижу сохранения в бд.
SoulKeeper> И за код без отступов надо бить :)

там есть отступы, просто реализовал через "quote",а не через "code" - так как текст тогда сильно по размеру увеличиваеться...

Ошибку пишет сам сервер - hero1711 (193 сборка), а так же L2J-Free (567)
пишет так же при просто команде через панель админа о добавлении скила (но толька при добавлении 1 лвла скила)

работа с изменением лвла скила:
L2Skill skillAdd = SkillTable.getInstance().getInfo(11098,(ConObn + 1));
player.addSkill(skillAdd);

описание скила:
<skill id="11098" levels="30" name="Control Obnyl">

<set name="power" val="0.0"/>
<set name="target" val="TARGET_SELF"/>
<set name="skillType" val="NOTDONE"/>
<set name="operateType" val="OP_PASSIVE"/>
<set name="castRange" val="-1"/>
<for>
</for>
</skill>
 
UA SoulKeeper #22.02.2007 11:05
+
-
edit
 

SoulKeeper

разработчик L2J Fortress

делай проверку на максимальный левел, и ошибку бы выложить не помешало.
Разыскивается десятка с два датапакеров :) http://la2.wrk.ru/forum/viewtopic.php?id=50882  
+
-
edit
 

Empire

новичок
Я уже давно всё поправил :) Ошибка оказалась в создании лога данного действия (мой недосмотр)

Спасибо всё же за ваши попытки мне помочь, благодарю!

P.S. Если кто знает и кому не трудно, выложите, пожалуйста, ссылки на SVN открытые сорсы java серверов - я учусь на примерах намного быстрее - от каких нить по С5 и/или С6. Пожалуйста :)
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru