private static final boolean checkAndChangeClass(L2PcInstance player, int val) { final ClassId currentClassId = player.getClassId(); if (getMinLevel(currentClassId.level()) > player.getLevel() && !Config.ALLOW_ENTIRE_TREE) return false; if (!validateClassId(currentClassId, val)) return false; int newJobLevel = currentClassId.level() + 1; // Weight/Inventory check if (!Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).isEmpty() && !player.isInventoryUnder80(false)) { player.sendPacket( SystemMessage.getSystemMessage(SystemMessageId.INVENTORY_LESS_THAN_80_PERCENT)); return false; } // check if player have all required items for class transfer for (int _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).keys()) { int _count = Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).get(_itemId); if (player.getInventory().getInventoryItemCount(_itemId, -1) < _count) { player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS); return false; } } // get all required items for class transfer for (int _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).keys()) { int _count = Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).get(_itemId); if (!player.destroyItemByItemId("ClassMaster", _itemId, _count, player, true)) return false; } // reward player with items for (int _itemId : Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).keys()) { int _count = Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).get(_itemId); player.addItem("ClassMaster", _itemId, _count, player, true); } player.setClassId(val); if (player.isSubClassActive()) player.getSubClasses().get(player.getClassIndex()).setClassId(player.getActiveClass()); else player.setBaseClass(player.getActiveClass()); Quest q = QuestManager.getInstance().getQuest("SkillTransfer"); if (q != null) q.startQuestTimer("givePormanders", 1, null, player); player.broadcastUserInfo(); if (Config.CLASS_MASTER_SETTINGS.isAllowed(player.getClassId().level() + 1) && Config.ALTERNATE_CLASS_MASTER && ((player.getClassId().level() == 1 && player.getLevel() >= 40) || (player.getClassId().level() == 2 && player.getLevel() >= 76))) showQuestionMark(player); return true; }
/** * Actions: * * <ul> * <li>Check if the killing object is a player, and then find the party they belong to. * <li>Add a blood offering item to the leader of the party. * <li>Update the party leader's inventory to show the new item addition. * </ul> */ @Override public void doItemDrop(L2Character lastAttacker) { L2PcInstance killingChar = null; if (!(lastAttacker instanceof L2PcInstance)) { return; } killingChar = (L2PcInstance) lastAttacker; L2Party associatedParty = killingChar.getParty(); if (associatedParty == null) { return; } L2PcInstance partyLeader = associatedParty.getLeader(); L2ItemInstance addedOfferings = partyLeader .getInventory() .addItem( "Sign", SevenSignsFestival.FESTIVAL_OFFERING_ID, _bonusMultiplier, partyLeader, this); InventoryUpdate iu = new InventoryUpdate(); if (addedOfferings.getCount() != _bonusMultiplier) { iu.addModifiedItem(addedOfferings); } else { iu.addNewItem(addedOfferings); } partyLeader.sendPacket(iu); super.doItemDrop(lastAttacker); // Normal drop }