Максимальный уровень заточки вещей на олимпиаде
Описание
Гайд о том как сделать конфиг на максимальный уровень заточки на Олимпиаде, возможно позволит новичкам освоится в ядре. При входе на стадион олимпиады предмет с точкой выше максимальной будет снят и до конца поединка его одеть будет нельзя.
Для этого обязательно наличие сурса (исходного кода).
И так поехали:
- Добавляем новый конфиг.
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 ом. Если понравилось, то не ленитесь и поставте "Спасибо".

Рекомендуемые комментарии
Комментариев нет