Рейтинг темы:
  • 1 Голос(ов) - 1 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Атрибуты баг
#11
Да, понимаю, что может быть для вас ответ элементарный, но повторюсь я недавно в этой теме) Надеюсь на понимание
Ответ
#12
Собственно вы не пытались, сообщить самим разработчикам? или же у тебя шаровая сборка?
Гуд
Ответ
#13
Laguerro Написал:с исходами работаю недавно, не знаю где точно искать. Подскажите в каком файле) В ядре или датапаке(скриптах)
Да, понимаю, что может быть для вас ответ элементарный, но повторюсь я недавно в этой теме) Надеюсь на понимание

А за подсказку будет вознаграждение в виде $$$ ? Smile
Ответ
#14
кстати баг рабит, а разработчик сборки отсутствует временно. Подскажите, будьте добры...чтото типа этого...
только на автобан при атт выше 120\300

public void equipItem(ItemInstance item)
{
int bodySlot = item.getBodyPart();

Player player = getActor().getPlayer();
if(player != null && Config.BANNED_MAX_ENCHANT_ENABLE && (!player.isGM() || (player.isGM() && Config.BANNED_MAX_ENCHANT_GM)))
{
int maxLevel = Config.ENCHANT_MAX_JEWELRY;
if(item.isWeapon())
maxLevel = Config.ENCHANT_MAX_WEAPON;
else if(item.isArmor())
maxLevel = Config.ENCHANT_MAX_ARMOR;

if(item.getEnchantLevel() > maxLevel)
{
AutoBan.Banned(player, -1, "Превысил максимальный уровень заточки", "auto_ban");
player.setAccessLevel(-100);
player.kick();
return;
}


Есть конфиг.
# по умолчанию 150\60
att_mod_max_weapon = 300
att_mod_max_armor = 120

Добавлено через 2 часа 3 минуты
да можно закрывать тему Laguerro, все равно никто никогда не поможет (в фиксе бага в одной из популярных сборок хф). Тут могут только понтануться своим умищем и послать в гугл или куда подальше ах да, и сказать что нам тут никто ни чем необязан или предложить помощь за $, в деле которое решается 1 минуту элементарно подсказав где искать и какую проверку добавить.
Ответ
#15
Только что лично тестил l2phx... с помощью обычный атт можно заточить шмот до 120атт, ган до 300.
С помощью кристаллов можно точнуть шмот до 240, ган до 600 атт.
При обычной заточки, да, точится как должно быть. При пакетах так вот.
Видимо ограничения в скриптах стоят неправильно, подскажите пожалуйста, где выставить правильные ограничения, чтоб обычными атт точилось 60\150 а кристаллами 120\300 ... пол ядра перелопатил, даже не знаю где искать...или где добавить. Надеюсь на помощь.
Ответ
#16
Если бы хотели помогли, за вас делать это не кто не будет, покупайте лейм ссср и частично забудьте о phx ну или платите за фиксы.
Ответ
#17
При чем тут "за вас делать") Задали вопрос "где ?" ) Элементарно подсказали бы где искать и что смотреть) Уже и за это денег берут? ооОО. Рвотный рефлекс начинает срабатывать после такого.
Ответ
#18
white7777x Написал:При чем тут "за вас делать") Задали вопрос "где ?" ) Элементарно подсказали бы где искать и что смотреть) Уже и за это денег берут? ооОО. Рвотный рефлекс начинает срабатывать после такого.

Выше дали намек, человеку нужен готовый фикс а не где копать, так что рвотный рефлекс как раз к автору темы проявляется, ибо человек не хочет думать , познавать или платить, а хочет за спс готовый фикс....
Ответ
#19
[SRC="java"]package l2p.gameserver.clientpackets;

import l2p.commons.dao.JdbcEntityState;
import l2p.commons.util.Rnd;
import l2p.gameserver.Config;
import l2p.gameserver.cache.Msg;
import l2p.gameserver.model.Player;
import l2p.gameserver.model.base.Element;
import l2p.gameserver.model.items.ItemInstance;
import l2p.gameserver.model.items.PcInventory;
import l2p.gameserver.serverpackets.ActionFail;
import l2p.gameserver.serverpackets.ExAttributeEnchantResult;
import l2p.gameserver.serverpackets.InventoryUpdate;
import l2p.gameserver.serverpackets.SystemMessage;
import l2p.gameserver.templates.item.ItemTemplate;
import l2p.gameserver.utils.ItemFunctions;

/**
* @author SYS
* Format: d
*/
public class RequestEnchantItemAttribute extends L2GameClientPacket
{
private int _objectId;

@Override
protected void readImpl()
{
_objectId = readD();
}

@Override
protected void runImpl()
{
Player activeChar = getClient().getActiveChar();
if(activeChar == null)
return;

if(_objectId == -1)
{
activeChar.setEnchantScroll(null);
activeChar.sendPacket(Msg.ELEMENTAL_POWER_ENCHANCER_USAGE_HAS_BEEN_CANCELLED);
return;
}

if(activeChar.isActionsDisabled())
{
activeChar.sendActionFailed();
return;
}

if(activeChar.isInStoreMode())
{
activeChar.sendPacket(Msg.YOU_CANNOT_ADD_ELEMENTAL_POWER_WHILE_OPERATING_A_PRIVATE_STORE_OR_PRIVATE_WORKSHOP, ActionFail.STATIC);
return;
}

if(activeChar.isInTrade())
{
activeChar.sendActionFailed();
return;
}

PcInventory inventory = activeChar.getInventory();
ItemInstance itemToEnchant = inventory.getItemByObjectId(_objectId);
ItemInstance stone = activeChar.getEnchantScroll();
activeChar.setEnchantScroll(null);

if(itemToEnchant == null || stone == null)
{
activeChar.sendActionFailed();
return;
}

ItemTemplate item = itemToEnchant.getTemplate();

if(!itemToEnchant.canBeEnchanted(true) || item.getCrystalType().cry < ItemTemplate.CRYSTAL_S)
{
activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS, ActionFail.STATIC);
return;
}

if(itemToEnchant.getLocation() != ItemInstance.ItemLocation.INVENTORY && itemToEnchant.getLocation() != ItemInstance.ItemLocation.PAPERDOLL)
{
activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS, ActionFail.STATIC);
return;
}

if(itemToEnchant.isStackable() || (stone = inventory.getItemByObjectId(stone.getObjectId())) == null)
{
activeChar.sendActionFailed();
return;
}

Element element = ItemFunctions.getEnchantAttributeStoneElement(stone.getItemId(), itemToEnchant.isArmor());

if(itemToEnchant.isArmor())
{
if(itemToEnchant.getAttributeElementValue(Element.getReverseElement(element), false) != 0)
{
activeChar.sendPacket(Msg.ANOTHER_ELEMENTAL_POWER_HAS_ALREADY_BEEN_ADDED_THIS_ELEMENTAL_POWER_CANNOT_BE_ADDED, ActionFail.STATIC);
return;
}
}
else if(itemToEnchant.isWeapon())
{
if(itemToEnchant.getAttributeElement() != Element.NONE && itemToEnchant.getAttributeElement() != element)
{
activeChar.sendPacket(Msg.ANOTHER_ELEMENTAL_POWER_HAS_ALREADY_BEEN_ADDED_THIS_ELEMENTAL_POWER_CANNOT_BE_ADDED, ActionFail.STATIC);
return;
}
}
else
{
activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS, ActionFail.STATIC);
return;
}

if(item.isUnderwear() || item.isCloak() || item.isBracelet() || item.isBelt() || !item.isAttributable())
{
activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS, ActionFail.STATIC);
return;
}

int maxValue = itemToEnchant.isWeapon() ? 150 : 60;

if(stone.getTemplate().isAttributeCrystal())
maxValue += itemToEnchant.isWeapon() ? 150 : 60;

if(itemToEnchant.getAttributeElementValue(element, false) >= maxValue)
{
activeChar.sendPacket(Msg.ELEMENTAL_POWER_ENCHANCER_USAGE_HAS_BEEN_CANCELLED, ActionFail.STATIC);
return;
}

// Запрет на заточку чужих вещей, баг может вылезти на серверных лагах
if(itemToEnchant.getOwnerId() != activeChar.getObjectId())
{
activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS, ActionFail.STATIC);
return;
}

if(!inventory.destroyItem(stone, 1L))
{
activeChar.sendActionFailed();
return;
}

if(Rnd.chance(stone.getTemplate().isAttributeCrystal() ? Config.ENCHANT_ATTRIBUTE_CRYSTAL_CHANCE : Config.ENCHANT_ATTRIBUTE_STONE_CHANCE))
{
if(itemToEnchant.getEnchantLevel() == 0)
{
SystemMessage sm = new SystemMessage(SystemMessage.S2_ELEMENTAL_POWER_HAS_BEEN_ADDED_SUCCESSFULLY_TO_S1);
sm.addItemName(itemToEnchant.getItemId());
sm.addItemName(stone.getItemId());
activeChar.sendPacket(sm);
}
else
{
SystemMessage sm = new SystemMessage(SystemMessage.S3_ELEMENTAL_POWER_HAS_BEEN_ADDED_SUCCESSFULLY_TO__S1S2);
sm.addNumber(itemToEnchant.getEnchantLevel());
sm.addItemName(itemToEnchant.getItemId());
sm.addItemName(stone.getItemId());
activeChar.sendPacket(sm);
}

int value = itemToEnchant.isWeapon() ? 5 : 6;

// Для оружия 1й камень дает +20 атрибута
if(itemToEnchant.getAttributeElementValue(element, false) == 0 && itemToEnchant.isWeapon())
value = 20;

boolean equipped = false;
if(equipped = itemToEnchant.isEquipped())
{
activeChar.getInventory().isRefresh = true;
activeChar.getInventory().unEquipItem(itemToEnchant);
}

itemToEnchant.setAttributeElement(element, itemToEnchant.getAttributeElementValue(element, false) + value);
itemToEnchant.setJdbcState(JdbcEntityState.UPDATED);
itemToEnchant.update();

if(equipped)
{
activeChar.getInventory().equipItem(itemToEnchant);
activeChar.getInventory().isRefresh = false;
}

activeChar.sendPacket(new InventoryUpdate().addModifiedItem(itemToEnchant));
activeChar.sendPacket(new ExAttributeEnchantResult(value));
}
else
activeChar.sendPacket(Msg.YOU_HAVE_FAILED_TO_ADD_ELEMENTAL_POWER);

activeChar.setEnchantScroll(null);
activeChar.updateStats();
}
}[/SRC]
Взято с оверов. Переделайте для себя.
[Изображение: 4e38c909fcd08c5fcdf363b54a62.png]
Ответ
#20
Zubastic, гыгыы
[src=java]PcInventory inventory = activeChar.getInventory();
ItemInstance itemToEnchant = inventory.getItemByObjectId(_objectId);

// Запрет на заточку чужих вещей, баг может вылезти на серверных лагах
if(itemToEnchant.getOwnerId() != activeChar.getObjectId())
{
activeChar.sendPacket(Msg.INAPPROPRIATE_ENCHANT_CONDITIONS, ActionFail.STATIC);
return;
}[/src]

Это что же за лаги должны быть, что инвентарь игрока умирает?
плюс:
[src=java]if(!inventory.destroyItem(stone, 1L))
{
activeChar.sendActionFailed();
return;
}
.........
activeChar.sendPacket(new InventoryUpdate().addModifiedItem(itemToEnchant));
[/src]
как минимум два пакета на изменение инвентаря, надо было либо соеденять воедино, оба предмета, либо уже итемлист слать

зачем все это оптимизировать, лучше "сделать фикс конфигов"
Ответ


Перейти к форуму:


Пользователи, просматривающие эту тему: 1 Гость(ей)