Максимальный уровень заточки вещей на олимпиаде
Описание
Гайд о том как сделать конфиг на максимальный уровень заточки на Олимпиаде, возможно позволит новичкам освоится в ядре. При входе на стадион олимпиады предмет с точкой выше максимальной будет снят и до конца поединка его одеть будет нельзя.
Для этого обязательно наличие сурса (исходного кода).
И так поехали:
- Добавляем новый конфиг.
1)Идем в java\silentium\gameserver\GameProperties.java
2)Поиском (Ctrl+F) находим строчку(или последнюю строчку конфигов олимпа):
public static boolean ALT_OLY_ANNOUNCE_GAMES;
3)После нее вставляем новые 2 строчки(наши конфиги):
public static int ALT_OLY_MAX_WEAPON_ENCHANT_LVL; public static int ALT_OLY_MAX_ARMOR_ENCHANT_LVL;
4)Поиском (Ctrl+F) находим строчку(или последнюю строчку вытаскивания конфигов олимпа):
ALT_OLY_ANNOUNCE_GAMES = Boolean.parseBoolean(events.getProperty("AltOlyAnnounceGames", "True"));
5)После нее вставляем новые 2 строчки(наше вытаскивание конфигов с файла):
ALT_OLY_MAX_WEAPON_ENCHANT_LVL = Integer.parseInt(events.getProperty("AltOlyMaxWeaponEnxhantLvl", "-1")); ALT_OLY_MAX_ARMOR_ENCHANT_LVL = Integer.parseInt(events.getProperty("AltOlyMaxArmorEnxhantLvl", "-1"));
6)Идем в config\game\events.properties
7)После строчки AltOlyDividerNonClassed = 5 (или в конце конфигов олимпа), вставляем:
# Максимальный уровень улучшения оружия на олимпиаде, default: -1 - не применять AltOlyMaxWeaponEnxhantLvl =-1 # Максимальный уровень улучшения брони на олимпиаде, default: -1 - не применять AltOlyMaxArmorEnxhantLvl =-1
Ура, первый шаг сделан. Мы добавили переменные - конфиги, и с файла конфигурации вытянули значение.
- добавление проверок.
1)Идем в java\silentium\gameserver\model\L2ItemInstance.java
2)Пихаем в класс(кто не знает что это -> гугл -> java классы) после любой функции (кто не знает, аналогично классу) этот код:
public boolean checkEnchantCondition(L2Character activeChar) { if(GameProperties.ALT_OLY_MAX_WEAPON_ENCHANT_LVL!=-1) { if (((getItem().getBodyPart()==L2Item.SLOT_R_HAND)||(getItem().getBodyPart()==L2Item.SLOT_LR_HAND))&&(getEnchantLevel()>GameProperties.ALT_OLY_MAX_WEAPON_ENCHANT_LVL)&&(activeChar.getActingPlayer().isInOlympiadMode())) { activeChar.getActingPlayer().sendMessage("Невозможно одеть оружие на Великих Олимпийских Играх с уровнем улучшения выше " + GameProperties.ALT_OLY_MAX_WEAPON_ENCHANT_LVL); return false; } } if(GameProperties.ALT_OLY_MAX_ARMOR_ENCHANT_LVL!=-1) { if (((getItem().getBodyPart()!=L2Item.SLOT_R_HAND)||(getItem().getBodyPart()!=L2Item.SLOT_LR_HAND))&&(getEnchantLevel()>GameProperties.ALT_OLY_MAX_ARMOR_ENCHANT_LVL)&&(activeChar.getActingPlayer().isInOlympiadMode())) { activeChar.getActingPlayer().sendMessage("Невозможно одеть броню на Великих Олимпийских Играх с уровнем улучшения выше " + GameProperties.ALT_OLY_MAX_ARMOR_ENCHANT_LVL); return false; } } return true; }
Вы спросите, что делает данный код? Ответ:
1. Проверяет включены ли настройки макс точки (не равно -1)
2. В 1 куске: если это оружие(правая рука или обе) и если его уровень заточки выше максимального и игрок сейчас участвует в олимпиаде, то пишет о невозможности использования предмета на олимпе и возвращает false.
3. В 2 куске все тоже что и в 1, но смотрим на все кроме оружия(бронь)
4. Если ничего выше не выполнилось, то возвращаем false.
Итак итог: если уровень улучшения предмета ниже максимального имеем true(он доступен к использованию на олимпе), а если нет, то false(не доступен к использованию на олимпе).
3)Идем в java\silentium\gameserver\network\clientpackets\UseItem.java
4)Находим поиском(или ручками):
if (!item.getItem().checkCondition(activeChar, activeChar, true)) { return; }
5)После этого куска кода вставляем:
if (!item.checkEnchantCondition(activeChar)) { return; }
Что это? При нажатии на итем, вызовется проверка которую мы добавили выше, и если итем не доступен для использование на оли, он не оденется(так как стоит return).
6)Идем в java\silentium\gameserver\model\actor\instance\L2PcInstance.java
7)Ищем руками или поиском:
public void checkItemRestriction() { for (int i = 0; i < Inventory.PAPERDOLL_TOTALSLOTS; i++) { L2ItemInstance equippedItem = getInventory().getPaperdollItem(i); if (equippedItem != null && !equippedItem.getItem().checkCondition(this, this, false)) { getInventory().unEquipItemInSlot(i); InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(equippedItem); sendPacket(iu); SystemMessage sm = null; if (equippedItem.getEnchantLevel() > 0) { sm = SystemMessage.getSystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED); sm.addNumber(equippedItem.getEnchantLevel()); sm.addItemName(equippedItem); } else { sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISARMED); sm.addItemName(equippedItem); } sendPacket(sm); } } }
и заменяем на:
public void checkItemRestriction() { for (int i = 0; i < Inventory.PAPERDOLL_TOTALSLOTS; i++) { L2ItemInstance equippedItem = getInventory().getPaperdollItem(i); if ((equippedItem != null) && (!equippedItem.getItem().checkCondition(this, this, false)|| (!equippedItem.checkEnchantCondition(this)))) { getInventory().unEquipItemInSlot(i); InventoryUpdate iu = new InventoryUpdate(); iu.addModifiedItem(equippedItem); sendPacket(iu); SystemMessage sm = null; if (equippedItem.getEnchantLevel() > 0) { sm = SystemMessage.getSystemMessage(SystemMessageId.EQUIPMENT_S1_S2_REMOVED); sm.addNumber(equippedItem.getEnchantLevel()); sm.addItemName(equippedItem); } else { sm = SystemMessage.getSystemMessage(SystemMessageId.S1_DISARMED); sm.addItemName(equippedItem); } sendPacket(sm); } } }
Эта функция вызывается когда игрока телепортирует на арену олимпиады, она проверяет на доступность итемы.
Мы в нее добавляем свою проверку которую добавили раньше. Итог: при тп на олимп, итем у которого уровень улучшения больше максимально будет снят.
Мы добавили конфиг на максимальную точку на олимпиаде. Если есть вопросы, пишем, я отвечу.
Гайд подготовлен Anderson ом. Если понравилось, то не ленитесь и поставте "Спасибо".
Рекомендуемые комментарии
Комментариев нет