- package net.sf.l2j.gameserver.handler.itemhandlers;
- import java.util.logging.Logger;
- import net.sf.l2j.gameserver.handler.IItemHandler;
- import net.sf.l2j.gameserver.model.actor.Playable;
- import net.sf.l2j.gameserver.model.actor.Player;
- import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
- import net.sf.l2j.gameserver.enums.Paperdoll;
- import net.sf.l2j.gameserver.model.Augmentation;
- import net.sf.l2j.gameserver.data.xml.AugmentationData;
- import net.sf.l2j.gameserver.data.LifeStoneManager;
- import net.sf.l2j.gameserver.network.serverpackets.ItemList;
- import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
- /**
- * LifestoneHandler by Atrein
- */
- public class LifestoneHandler implements IItemHandler {
- public int[] getItemIds() {
- return new int[] {
- 8723, 8724, 8725, 8726, 8727, 8728, 8729, 8730,
- 8731, 8732, 8733, 8734, 8735, 8736, 8737, 8738,
- 8739, 8740, 8741, 8742, 8743, 8744, 8745, 8746,
- 8747, 8748, 8749, 8750, 8751, 8752, 8753, 8754,
- 8755, 8756, 8757, 8758, 8759, 8760, 8761, 8762
- };
- }
- private static final Logger _log = Logger.getLogger(LifestoneHandler.class.getName());
- // Gemstone item IDs by grade
- private static final int GEMSTONE_D = 2130;
- private static final int GEMSTONE_C = 2131;
- private static final int GEMSTONE_B = 2132;
- private static final int GEMSTONE_A = 2133;
- private static final int GEMSTONE_S = 2134;
- static {
- _log.info("[LifestoneHandler] Loaded: Right-click Life Stone augmentation enabled.");
- }
- @Override
- public void useItem(Playable playable, ItemInstance item, boolean ctrl) {
- if (!(playable instanceof Player) || item == null)
- return;
- Player player = (Player) playable;
- ItemInstance weapon = player.getInventory().getItemFrom(Paperdoll.RHAND); // правый клик
- if (weapon == null) {
- player.sendMessage("You must equip a weapon to insert a Life Stone.");
- return;
- }
- if (!(weapon.getItem() instanceof net.sf.l2j.gameserver.model.item.kind.Weapon)) {
- player.sendMessage("Life Stones can only be used on weapons.");
- return;
- }
- if (weapon.isAugmented()) {
- player.sendMessage("This weapon is already augmented.");
- return;
- }
- int itemId = item.getItemId();
- int grade = LifeStoneManager.getGrade(itemId); // 0: общий, 1: средний, 2: высокий, 3: топовый
- int level = LifeStoneManager.getLevel(itemId); // обычно 0-3
- int gemstoneId;
- int gemstoneCount;
- switch (weapon.getItem().getCrystalType()) {
- case D:
- gemstoneId = GEMSTONE_D;
- gemstoneCount = 20;
- break;
- case C:
- gemstoneId = GEMSTONE_C;
- gemstoneCount = 30;
- break;
- case B:
- gemstoneId = GEMSTONE_B;
- gemstoneCount = 20;
- break;
- case A:
- gemstoneId = GEMSTONE_A;
- gemstoneCount = 25;
- break;
- case S:
- gemstoneId = GEMSTONE_S;
- gemstoneCount = 35;
- break;
- default:
- player.sendMessage("This weapon grade cannot be augmented.");
- return;
- }
- if (player.getInventory().destroyItemByItemId(gemstoneId, gemstoneCount) == null) {
- player.sendMessage("You need " + gemstoneCount + " Gemstones to augment this weapon.");
- return;
- }
- ItemInstance destroyed = player.getInventory().destroyItem(item, 1);
- if (destroyed == null) {
- player.sendMessage("Failed to consume Life Stone item.");
- return;
- }
- Augmentation augmentation = AugmentationData.getInstance().generateRandomAugmentation(level, grade);
- weapon.setAugmentation(augmentation, player);
- player.sendMessage("The augmentation was successful.");
- player.sendPacket(new ItemList(player, false));
- player.sendMessage("Your weapon has been augmented with " + item.getItemName() + ".");
- // Визуальный эффект при удачном аугментировании
- player.broadcastPacket(new MagicSkillUse(player, player, 1062, 1, 1000, 0));
- _log.info("[LifestoneHandler] Player " + player.getName() + " augmented weapon ID: " + weapon.getItemId() + " with Life Stone ID: " + itemId + " (Grade: " + grade + ", Level: " + level + ")");
- }
- }
- package net.sf.l2j.gameserver.data;
- import java.util.HashMap;
- import java.util.Map;
- /**
- * LifeStoneManager by Atrein
- */
- public class LifeStoneManager {
- private static final Map<Integer, Integer> ITEM_GRADES = new HashMap<>();
- private static final Map<Integer, Integer> ITEM_LEVELS = new HashMap<>();
- static {
- // Grade 0 - Common
- ITEM_GRADES.put(8723, 0); ITEM_LEVELS.put(8723, 0);
- ITEM_GRADES.put(8724, 0); ITEM_LEVELS.put(8724, 1);
- ITEM_GRADES.put(8725, 0); ITEM_LEVELS.put(8725, 2);
- ITEM_GRADES.put(8726, 0); ITEM_LEVELS.put(8726, 3);
- ITEM_GRADES.put(8727, 0); ITEM_LEVELS.put(8727, 4);
- ITEM_GRADES.put(8728, 0); ITEM_LEVELS.put(8728, 5);
- ITEM_GRADES.put(8729, 0); ITEM_LEVELS.put(8729, 6);
- ITEM_GRADES.put(8730, 0); ITEM_LEVELS.put(8730, 7);
- ITEM_GRADES.put(8731, 0); ITEM_LEVELS.put(8731, 8);
- ITEM_GRADES.put(8732, 0); ITEM_LEVELS.put(8732, 9);
- // Grade 1 - Mid
- ITEM_GRADES.put(8733, 1); ITEM_LEVELS.put(8733, 0);
- ITEM_GRADES.put(8734, 1); ITEM_LEVELS.put(8734, 1);
- ITEM_GRADES.put(8735, 1); ITEM_LEVELS.put(8735, 2);
- ITEM_GRADES.put(8736, 1); ITEM_LEVELS.put(8736, 3);
- ITEM_GRADES.put(8737, 1); ITEM_LEVELS.put(8737, 4);
- ITEM_GRADES.put(8738, 1); ITEM_LEVELS.put(8738, 5);
- ITEM_GRADES.put(8739, 1); ITEM_LEVELS.put(8739, 6);
- ITEM_GRADES.put(8740, 1); ITEM_LEVELS.put(8740, 7);
- ITEM_GRADES.put(8741, 1); ITEM_LEVELS.put(8741, 8);
- ITEM_GRADES.put(8742, 1); ITEM_LEVELS.put(8742, 9);
- // Grade 2 - High
- ITEM_GRADES.put(8743, 2); ITEM_LEVELS.put(8743, 0);
- ITEM_GRADES.put(8744, 2); ITEM_LEVELS.put(8744, 1);
- ITEM_GRADES.put(8745, 2); ITEM_LEVELS.put(8745, 2);
- ITEM_GRADES.put(8746, 2); ITEM_LEVELS.put(8746, 3);
- ITEM_GRADES.put(8747, 2); ITEM_LEVELS.put(8747, 4);
- ITEM_GRADES.put(8748, 2); ITEM_LEVELS.put(8748, 5);
- ITEM_GRADES.put(8749, 2); ITEM_LEVELS.put(8749, 6);
- ITEM_GRADES.put(8750, 2); ITEM_LEVELS.put(8750, 7);
- ITEM_GRADES.put(8751, 2); ITEM_LEVELS.put(8751, 8);
- ITEM_GRADES.put(8752, 2); ITEM_LEVELS.put(8752, 9);
- // Grade 3 - Top
- ITEM_GRADES.put(8753, 3); ITEM_LEVELS.put(8753, 0);
- ITEM_GRADES.put(8754, 3); ITEM_LEVELS.put(8754, 1);
- ITEM_GRADES.put(8755, 3); ITEM_LEVELS.put(8755, 2);
- ITEM_GRADES.put(8756, 3); ITEM_LEVELS.put(8756, 3);
- ITEM_GRADES.put(8757, 3); ITEM_LEVELS.put(8757, 4);
- ITEM_GRADES.put(8758, 3); ITEM_LEVELS.put(8758, 5);
- ITEM_GRADES.put(8759, 3); ITEM_LEVELS.put(8759, 6);
- ITEM_GRADES.put(8760, 3); ITEM_LEVELS.put(8760, 7);
- ITEM_GRADES.put(8761, 3); ITEM_LEVELS.put(8761, 8);
- ITEM_GRADES.put(8762, 3); ITEM_LEVELS.put(8762, 9);
- }
- public static int getGrade(int itemId) {
- return ITEM_GRADES.getOrDefault(itemId, 0); // по умолчанию
- }
- public static int getLevel(int itemId) {
- return ITEM_LEVELS.getOrDefault(itemId, 0); // по умолчанию
- }
- }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
И добавить в ItemHandler импорт и регистрацию
+import net.sf.l2j.gameserver.handler.itemhandlers.LifestoneHandler;
+registerHandler(new LifestoneHandler());
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Ещё можно добавить "визуальный эффект" при успешной вставке, например: Берсерк id 1062 к классу LifestoneHandler
- package net.sf.l2j.gameserver.handler.itemhandlers;
- import java.util.logging.Logger;
- import net.sf.l2j.gameserver.handler.IItemHandler;
- import net.sf.l2j.gameserver.model.actor.Playable;
- import net.sf.l2j.gameserver.model.actor.Player;
- import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
- import net.sf.l2j.gameserver.enums.Paperdoll;
- import net.sf.l2j.gameserver.model.Augmentation;
- import net.sf.l2j.gameserver.data.xml.AugmentationData;
- import net.sf.l2j.gameserver.data.LifeStoneManager;
- +import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
- }
- Augmentation augmentation = AugmentationData.getInstance().generateRandomAugmentation(level, grade);
- weapon.setAugmentation(augmentation, player);
- player.sendMessage("The augmentation was successful.");
- player.sendPacket(new net.sf.l2j.gameserver.network.serverpackets.ItemList(player, false));
- player.sendMessage("Your weapon has been augmented with " + item.getItemName() + ".");
- +++ // Визуальный эффект при успешной аугментации
- +++ player.broadcastPacket(new MagicSkillUse(player, player, 1062, 1, 1000, 0));
- _log.info("[LifestoneHandler] Player " + player.getName() + " augmented weapon ID: " + weapon.getItemId() + " with Life Stone ID: " + itemId + " (Grade: " + grade + ", Level: " + level + ")");
- }
- }
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
В items ".xml файлах" добавить Handler всем камням:
<item id="8723" type="EtcItem" name="Life Stone: level 46">В items ".xml файлах" добавить Handler всем камням:
<set name="icon" val="icon.etc_mineral_general_i00" />
<set name="material" val="LIQUID" />
<set name="weight" val="2" />
<set name="price" val="5000" />
+ <set name="handler" val="LifestoneHandler" />
<cond msgId="113">
<player level="46" />
</cond>
</item>
Последнее редактирование: