Перейти к содержанию
Авторизация  

Максимальный уровень заточки вещей на олимпиаде


Описание

Данный мануал позволит вам самостоятельно добавить ограничение на максимальную точку на олимпиаде, а так же новичкам - освоится в ядре

Гайд о том как сделать конфиг на максимальный уровень заточки на Олимпиаде, возможно позволит новичкам освоится в ядре. При входе на стадион олимпиады предмет с точкой выше максимальной будет снят и до конца поединка его одеть будет нельзя.

Для этого обязательно наличие сурса (исходного кода).

 

И так поехали:

- Добавляем новый конфиг.

 

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 ом. Если понравилось, то не ленитесь и поставте "Спасибо".



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

Комментариев нет

×
×
  • Создать...