Welcome to RUSaCis - эмулятор Interlude

Присоединяйтесь к нам прямо сейчас, чтобы получить доступ ко всем нашим возможностям. После регистрации и входа в систему вы сможете создавать темы, публиковать ответы в существующих темах, давать репутацию пользователям - так же приобрести исходный код. Это также быстро, так чего же вы ждете?

LifeStone's по клику

Atrein

Вассал
INTERLUDE
INTERFACE
Регистрация
16 Янв 2022
Сообщения
34
Реакции
22
Баллы
8
RaCoin
5
  1. package net.sf.l2j.gameserver.handler.itemhandlers;
  2. import java.util.logging.Logger;
  3. import net.sf.l2j.gameserver.handler.IItemHandler;
  4. import net.sf.l2j.gameserver.model.actor.Playable;
  5. import net.sf.l2j.gameserver.model.actor.Player;
  6. import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
  7. import net.sf.l2j.gameserver.enums.Paperdoll;
  8. import net.sf.l2j.gameserver.model.Augmentation;
  9. import net.sf.l2j.gameserver.data.xml.AugmentationData;
  10. import net.sf.l2j.gameserver.data.LifeStoneManager;
  11. import net.sf.l2j.gameserver.network.serverpackets.ItemList;
  12. import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
  13. /**
  14. * LifestoneHandler by Atrein
  15. */
  16. public class LifestoneHandler implements IItemHandler {
  17. public int[] getItemIds() {
  18. return new int[] {
  19. 8723, 8724, 8725, 8726, 8727, 8728, 8729, 8730,
  20. 8731, 8732, 8733, 8734, 8735, 8736, 8737, 8738,
  21. 8739, 8740, 8741, 8742, 8743, 8744, 8745, 8746,
  22. 8747, 8748, 8749, 8750, 8751, 8752, 8753, 8754,
  23. 8755, 8756, 8757, 8758, 8759, 8760, 8761, 8762
  24. };
  25. }
  26. private static final Logger _log = Logger.getLogger(LifestoneHandler.class.getName());
  27. // Gemstone item IDs by grade
  28. private static final int GEMSTONE_D = 2130;
  29. private static final int GEMSTONE_C = 2131;
  30. private static final int GEMSTONE_B = 2132;
  31. private static final int GEMSTONE_A = 2133;
  32. private static final int GEMSTONE_S = 2134;
  33. static {
  34. _log.info("[LifestoneHandler] Loaded: Right-click Life Stone augmentation enabled.");
  35. }
  36. @Override
  37. public void useItem(Playable playable, ItemInstance item, boolean ctrl) {
  38. if (!(playable instanceof Player) || item == null)
  39. return;
  40. Player player = (Player) playable;
  41. ItemInstance weapon = player.getInventory().getItemFrom(Paperdoll.RHAND); // правый клик
  42. if (weapon == null) {
  43. player.sendMessage("You must equip a weapon to insert a Life Stone.");
  44. return;
  45. }
  46. if (!(weapon.getItem() instanceof net.sf.l2j.gameserver.model.item.kind.Weapon)) {
  47. player.sendMessage("Life Stones can only be used on weapons.");
  48. return;
  49. }
  50. if (weapon.isAugmented()) {
  51. player.sendMessage("This weapon is already augmented.");
  52. return;
  53. }
  54. int itemId = item.getItemId();
  55. int grade = LifeStoneManager.getGrade(itemId); // 0: общий, 1: средний, 2: высокий, 3: топовый
  56. int level = LifeStoneManager.getLevel(itemId); // обычно 0-3
  57. int gemstoneId;
  58. int gemstoneCount;
  59. switch (weapon.getItem().getCrystalType()) {
  60. case D:
  61. gemstoneId = GEMSTONE_D;
  62. gemstoneCount = 20;
  63. break;
  64. case C:
  65. gemstoneId = GEMSTONE_C;
  66. gemstoneCount = 30;
  67. break;
  68. case B:
  69. gemstoneId = GEMSTONE_B;
  70. gemstoneCount = 20;
  71. break;
  72. case A:
  73. gemstoneId = GEMSTONE_A;
  74. gemstoneCount = 25;
  75. break;
  76. case S:
  77. gemstoneId = GEMSTONE_S;
  78. gemstoneCount = 35;
  79. break;
  80. default:
  81. player.sendMessage("This weapon grade cannot be augmented.");
  82. return;
  83. }
  84. if (player.getInventory().destroyItemByItemId(gemstoneId, gemstoneCount) == null) {
  85. player.sendMessage("You need " + gemstoneCount + " Gemstones to augment this weapon.");
  86. return;
  87. }
  88. ItemInstance destroyed = player.getInventory().destroyItem(item, 1);
  89. if (destroyed == null) {
  90. player.sendMessage("Failed to consume Life Stone item.");
  91. return;
  92. }
  93. Augmentation augmentation = AugmentationData.getInstance().generateRandomAugmentation(level, grade);
  94. weapon.setAugmentation(augmentation, player);
  95. player.sendMessage("The augmentation was successful.");
  96. player.sendPacket(new ItemList(player, false));
  97. player.sendMessage("Your weapon has been augmented with " + item.getItemName() + ".");
  98. // Визуальный эффект при удачном аугментировании
  99. player.broadcastPacket(new MagicSkillUse(player, player, 1062, 1, 1000, 0));
  100. _log.info("[LifestoneHandler] Player " + player.getName() + " augmented weapon ID: " + weapon.getItemId() + " with Life Stone ID: " + itemId + " (Grade: " + grade + ", Level: " + level + ")");
  101. }
  102. }
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////


  1. package net.sf.l2j.gameserver.data;
  2. import java.util.HashMap;
  3. import java.util.Map;
  4. /**
  5. * LifeStoneManager by Atrein
  6. */
  7. public class LifeStoneManager {
  8. private static final Map<Integer, Integer> ITEM_GRADES = new HashMap<>();
  9. private static final Map<Integer, Integer> ITEM_LEVELS = new HashMap<>();
  10. static {
  11. // Grade 0 - Common
  12. ITEM_GRADES.put(8723, 0); ITEM_LEVELS.put(8723, 0);
  13. ITEM_GRADES.put(8724, 0); ITEM_LEVELS.put(8724, 1);
  14. ITEM_GRADES.put(8725, 0); ITEM_LEVELS.put(8725, 2);
  15. ITEM_GRADES.put(8726, 0); ITEM_LEVELS.put(8726, 3);
  16. ITEM_GRADES.put(8727, 0); ITEM_LEVELS.put(8727, 4);
  17. ITEM_GRADES.put(8728, 0); ITEM_LEVELS.put(8728, 5);
  18. ITEM_GRADES.put(8729, 0); ITEM_LEVELS.put(8729, 6);
  19. ITEM_GRADES.put(8730, 0); ITEM_LEVELS.put(8730, 7);
  20. ITEM_GRADES.put(8731, 0); ITEM_LEVELS.put(8731, 8);
  21. ITEM_GRADES.put(8732, 0); ITEM_LEVELS.put(8732, 9);
  22. // Grade 1 - Mid
  23. ITEM_GRADES.put(8733, 1); ITEM_LEVELS.put(8733, 0);
  24. ITEM_GRADES.put(8734, 1); ITEM_LEVELS.put(8734, 1);
  25. ITEM_GRADES.put(8735, 1); ITEM_LEVELS.put(8735, 2);
  26. ITEM_GRADES.put(8736, 1); ITEM_LEVELS.put(8736, 3);
  27. ITEM_GRADES.put(8737, 1); ITEM_LEVELS.put(8737, 4);
  28. ITEM_GRADES.put(8738, 1); ITEM_LEVELS.put(8738, 5);
  29. ITEM_GRADES.put(8739, 1); ITEM_LEVELS.put(8739, 6);
  30. ITEM_GRADES.put(8740, 1); ITEM_LEVELS.put(8740, 7);
  31. ITEM_GRADES.put(8741, 1); ITEM_LEVELS.put(8741, 8);
  32. ITEM_GRADES.put(8742, 1); ITEM_LEVELS.put(8742, 9);
  33. // Grade 2 - High
  34. ITEM_GRADES.put(8743, 2); ITEM_LEVELS.put(8743, 0);
  35. ITEM_GRADES.put(8744, 2); ITEM_LEVELS.put(8744, 1);
  36. ITEM_GRADES.put(8745, 2); ITEM_LEVELS.put(8745, 2);
  37. ITEM_GRADES.put(8746, 2); ITEM_LEVELS.put(8746, 3);
  38. ITEM_GRADES.put(8747, 2); ITEM_LEVELS.put(8747, 4);
  39. ITEM_GRADES.put(8748, 2); ITEM_LEVELS.put(8748, 5);
  40. ITEM_GRADES.put(8749, 2); ITEM_LEVELS.put(8749, 6);
  41. ITEM_GRADES.put(8750, 2); ITEM_LEVELS.put(8750, 7);
  42. ITEM_GRADES.put(8751, 2); ITEM_LEVELS.put(8751, 8);
  43. ITEM_GRADES.put(8752, 2); ITEM_LEVELS.put(8752, 9);
  44. // Grade 3 - Top
  45. ITEM_GRADES.put(8753, 3); ITEM_LEVELS.put(8753, 0);
  46. ITEM_GRADES.put(8754, 3); ITEM_LEVELS.put(8754, 1);
  47. ITEM_GRADES.put(8755, 3); ITEM_LEVELS.put(8755, 2);
  48. ITEM_GRADES.put(8756, 3); ITEM_LEVELS.put(8756, 3);
  49. ITEM_GRADES.put(8757, 3); ITEM_LEVELS.put(8757, 4);
  50. ITEM_GRADES.put(8758, 3); ITEM_LEVELS.put(8758, 5);
  51. ITEM_GRADES.put(8759, 3); ITEM_LEVELS.put(8759, 6);
  52. ITEM_GRADES.put(8760, 3); ITEM_LEVELS.put(8760, 7);
  53. ITEM_GRADES.put(8761, 3); ITEM_LEVELS.put(8761, 8);
  54. ITEM_GRADES.put(8762, 3); ITEM_LEVELS.put(8762, 9);
  55. }
  56. public static int getGrade(int itemId) {
  57. return ITEM_GRADES.getOrDefault(itemId, 0); // по умолчанию
  58. }
  59. public static int getLevel(int itemId) {
  60. return ITEM_LEVELS.getOrDefault(itemId, 0); // по умолчанию
  61. }
  62. }

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
И добавить в 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">
<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>
 
Последнее редактирование:

Atrein

Вассал
INTERLUDE
INTERFACE
Регистрация
16 Янв 2022
Сообщения
34
Реакции
22
Баллы
8
RaCoin
5
Вот полностью готовый Мод Lifestone по клику, забирайте, пользуйтесь кому надо.
ЛСы вставляются прямо из инвентаря при наличии должного количества Gemstone.
Могу ещё что ни будь написать из "модов" по желанию, пишите в ЛС
 

KillerStereotype

Бродяга
Регистрация
21 Май 2025
Сообщения
9
Реакции
0
Баллы
1
RaCoin
0
Большое спасибо, сейчас еще работаю над

.блокбафф
снятия баффов клик
.епик
автологин
итемы в одной ячейке - ну ето походу патч херовый у меня пока не добрался
а ну еще
сабклас менеджера в класс мастера нид

Мелочовка в основном осталась...
 
Последнее редактирование:

Mi-star

Death Lord Ipos
INTERLUDE
CLASSIC
CLASSIC
INTERLUDE
INTERFACE
Регистрация
24 Апр 2022
Сообщения
81
Реакции
35
Баллы
18
RaCoin
500
Большое спасибо, сейчас еще работаю над

.блокбафф
снятия баффов клик
.епик
автологин
итемы в одной ячейке - ну ето походу патч херовый у меня пока не добрался
а ну еще
сабклас менеджера в класс мастера нид

Мелочовка в основном осталась...
блокбафф встроенный с 3.7 вроде, как и .raid/.epic. автологин в интерфейсе тоже рализован. Ну это на случай, если кто-то имеет доступ к последним ревизиям и интерфейсу и как-то пропустил эти моменты :)
 

Aztur

Бродяга
Регистрация
21 Июл 2022
Сообщения
19
Реакции
19
Баллы
3
RaCoin
20
Большое спасибо, сейчас еще работаю над

.блокбафф
снятия баффов клик
.епик
автологин
итемы в одной ячейке - ну ето походу патч херовый у меня пока не добрался
а ну еще
сабклас менеджера в класс мастера нид

Мелочовка в основном осталась...

автологин? и как успехи?
 

KillerStereotype

Бродяга
Регистрация
21 Май 2025
Сообщения
9
Реакции
0
Баллы
1
RaCoin
0
блокбафф встроенный с 3.7 вроде, как и .raid/.epic. автологин в интерфейсе тоже рализован. Ну это на случай, если кто-то имеет доступ к последним ревизиям и интерфейсу и как-то пропустил эти моменты :)
намек ясен, остаеться найти где копипастить)
 

KillerStereotype

Бродяга
Регистрация
21 Май 2025
Сообщения
9
Реакции
0
Баллы
1
RaCoin
0
Вот полностью готовый Мод Lifestone по клику, забирайте, пользуйтесь кому надо.
ЛСы вставляются прямо из инвентаря при наличии должного количества Gemstone.
Могу ещё что ни будь написать из "модов" по желанию, пишите в ЛС

LifestoneHandler
package net.sf.l2j.gameserver.handler.itemhandlers;


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.enums.items.CrystalType;
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;
import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;

public class LifestoneHandler implements IItemHandler {

private static final int GEMSTONE_D = 2130;
private static final int GEMSTONE_C = 2131;
private static final int GEMSTONE_B = 2132;


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
};
}

@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.getItem().getCrystalType() == CrystalType.D) {
player.sendMessage("Life Stones cannot be used on D-grade weapons.");
return;
}

if (weapon.isAugmented()) {
Augmentation currentAug = weapon.getAugmentation();
if (currentAug != null && currentAug.getSkill() != null) {
showAugmentConfirmWindow(player, item.getObjectId(), currentAug.getSkill().getId(), currentAug.getSkill().getName());
return;
} else {
player.sendMessage("Your weapon is already augmented, but has no skill. Replacing augmentation.");
}
}

applyAugmentation(player, weapon, item);
}

public void applyAugmentation(Player player, ItemInstance weapon, ItemInstance item) {
int itemId = item.getItemId();
int grade = LifeStoneManager.getGrade(itemId);
int level = LifeStoneManager.getLevel(itemId);

int gemstoneId;
int gemstoneCount;

switch (weapon.getItem().getCrystalType()) {
case C:
gemstoneId = GEMSTONE_D;
gemstoneCount = 20;
break;
case B:
gemstoneId = GEMSTONE_D;
gemstoneCount = 30;
break;
case A:
gemstoneId = GEMSTONE_C;
gemstoneCount = 20;
break;
case S:
gemstoneId = GEMSTONE_C;
gemstoneCount = 25;
break;
default:
player.sendMessage("This weapon grade cannot be augmented.");
return;
}

if (player.getInventory().destroyItemByItemId("Augment", gemstoneId, gemstoneCount, player, null) == null) {
player.sendMessage("You need " + gemstoneCount + " Gemstones to augment this weapon.");
return;
}

if (player.getInventory().destroyItem("Augment", item, 1, player, null) == null) {
player.sendMessage("Failed to consume Life Stone item.");
return;
}

if (weapon.isAugmented()) {
weapon.getAugmentation().removeBonus(player); // снимаем бонусы и скиллы с игрока
weapon.removeAugmentation(); // убираем аугментацию с оружия
}

Augmentation augmentation = AugmentationData.getInstance().generateRandomAugmentation(level, grade);
weapon.setAugmentation(augmentation);

if (augmentation != null) {
augmentation.applyBonus(player); // применяем бонусы и скиллы новой аугментации
}


player.sendMessage("The augmentation was successful.");
player.sendPacket(new ItemList(player, false));
player.sendMessage("Your weapon has been augmented with " + item.getItemName() + ".");

if (augmentation.getSkill() != null) {
player.broadcastPacket(new MagicSkillUse(player, player, 2025, 1, 1000, 0));
player.sendMessage("You've successfully augmented your weapon with a skill: " + augmentation.getSkill().getName() + ".");
} else {
player.sendMessage("Augmentation applied, but no skill was gained.");
}
}

private void showAugmentConfirmWindow(Player player, int lifeStoneObjId, int skillId, String skillName) {
NpcHtmlMessage html = new NpcHtmlMessage(player.getObjectId());
StringBuilder sb = new StringBuilder();

sb.append("<html><body>");

// Верхняя часть с логотипом и декором
sb.append("<center>");
sb.append("<img src=\"L2UI_CH3.herotower_deco\" width=\"256\" height=\"32\" /><br>");
sb.append("<img src=\"l2ui.squaregray\" width=\"300\" height=\"1\"><br>");
sb.append("<img src=\"l2font-e.replay_logo-e\" width=\"250\" height=\"70\"><br><br>");
sb.append("</center>");

// Основной текст
sb.append("<center>");
sb.append("Your weapon already has an augmentation skill:<br1>");
sb.append("<font color=\"LEVEL\">").append(skillName).append(" (ID: ").append(skillId).append(")</font><br><br>");
sb.append("Do you really want to replace the current augmentation?<br><br>");

// Кнопки с аккуратным расстоянием
sb.append("<table width=\"200\" cellpadding=\"5\">");
sb.append("<tr>");
sb.append("<td align=\"center\">");
sb.append("<button value=\"Replace\" action=\"bypass -h augment_confirm ").append(lifeStoneObjId)
.append("\" width=\"75\" height=\"21\" back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">");
sb.append("</td>");
sb.append("<td align=\"center\">");
sb.append("<button value=\"Cancel\" action=\"bypass -h close\" width=\"75\" height=\"21\" back=\"L2UI_ch3.Btn1_normalOn\" fore=\"L2UI_ch3.Btn1_normal\">");
sb.append("</td>");
sb.append("</tr>");
sb.append("</table>");
sb.append("</center><br><br>");

// Нижняя часть с декором
sb.append("<center>");
sb.append("<img src=\"l2ui.squaregray\" width=\"300\" height=\"1\"><br>");
sb.append("<img src=\"L2UI_CH3.herotower_deco\" width=\"256\" height=\"32\" />");
sb.append("</center>");

sb.append("</body></html>");

html.setHtml(sb.toString());
player.sendPacket(html);
}

}

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

RequestBypassToServer
package net.sf.l2j.gameserver.network.clientpackets;
+import net.sf.l2j.gameserver.handler.itemhandlers.LifestoneHandler;
+import net.sf.l2j.gameserver.enums.Paperdoll;
+import net.sf.l2j.gameserver.handler.ItemHandler;
+import net.sf.l2j.gameserver.handler.IItemHandler;
+import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
+import net.sf.l2j.gameserver.model.item.kind.EtcItem;

-@Override
-protected void runImpl()
-{
- if (_command.isEmpty())
- return;
-
- if (!getClient().performAction(FloodProtector.SERVER_BYPASS))
- return;
-
- final Player player = getClient().getPlayer();
- if (player == null)
- return;

-+ String[] parts = _command.split(" ", 2);
+ String command = parts[0]; // ← ТУТ однажды объявляем переменную

// ===AUGMENT MOD ===
if (command.equals("augment_confirm"))
{
if (parts.length < 2)
{
player.sendMessage("Invalid command format. Usage: augment_confirm <itemObjectId>");
return;
}

String param = parts[1].trim();
int lifeStoneObjId;
try
{
lifeStoneObjId = Integer.parseInt(param);
}
catch (NumberFormatException e)
{
player.sendMessage("Invalid Life Stone ID.");
return;
}

ItemInstance lifeStoneItem = player.getInventory().getItemByObjectId(lifeStoneObjId);
if (lifeStoneItem == null)
{
player.sendMessage("Life Stone not found.");
return;
}

ItemInstance weapon = player.getInventory().getItemFrom(Paperdoll.RHAND);
if (weapon == null)
{
player.sendMessage("You must equip a weapon.");
return;
}

Item item = lifeStoneItem.getItem();
if (!(item instanceof EtcItem))
{
player.sendMessage("This item cannot be used for augmentation.");
return;
}

IItemHandler handler = ItemHandler.getInstance().getHandler((EtcItem) item);
if (!(handler instanceof LifestoneHandler))
{
player.sendMessage("Cannot augment with this item.");
return;
}

LifestoneHandler lifestoneHandler = (LifestoneHandler) handler;
lifestoneHandler.applyAugmentation(player, weapon, lifeStoneItem);
return;

}



- if (_command.startsWith("admin_"))
- {
-+ command = _command.split(" ")[0]; // уже объявлен — просто перезаписываем
 

Atrein

Вассал
INTERLUDE
INTERFACE
Регистрация
16 Янв 2022
Сообщения
34
Реакции
22
Баллы
8
RaCoin
5
Попробую реализовать "Forgotten Scroll", что бы можно было учить любой скилл через items
 

Aztur

Бродяга
Регистрация
21 Июл 2022
Сообщения
19
Реакции
19
Баллы
3
RaCoin
20
блокбафф встроенный с 3.7 вроде, как и .raid/.epic. автологин в интерфейсе тоже рализован. Ну это на случай, если кто-то имеет доступ к последним ревизиям и интерфейсу и как-то пропустил эти моменты :)

пропустил.
как сделан автологин, можешь в двух словах? Очень хочется лаунчер запилить.
 

Mi-star

Death Lord Ipos
INTERLUDE
CLASSIC
CLASSIC
INTERLUDE
INTERFACE
Регистрация
24 Апр 2022
Сообщения
81
Реакции
35
Баллы
18
RaCoin
500
пропустил.
как сделан автологин, можешь в двух словах? Очень хочется лаунчер запилить.
на экране логина доп. окошко со списком сохраненных аккаунтов

1751470421737.png
 
Сверху Снизу