не дает кристал за заточку

Grekk

Выдающийся
Участник
Старожил I степени
Сообщения
247
Розыгрыши
0
Репутация
85
Реакции
237
Баллы
1 395
Хроники
  1. Fafurion
Исходники
Присутствуют
Сборка
L2J_Mobius
Уже целый день пытаюсь лопатить датапак, но так и не могу понять как такое реализовать. Есть пушка когда ее точишь выше +6 если она ломается дает кристалы а грейд пушка а грейда, а должно еще давать камень который можно обменять на заточки то есть должно быть два итема, как это реализовать или через датапак это не сделать? Если это делать через ядро где это хотяб искать? Может есть какой то пример
вот сам итем
id="91462" name="Weapon Enhancement Stone" type="EtcItem">
<!-- Take it to Weapon Merchant Galladucci in Giran to exchange for Scroll: Enchant Weapon (D/ C/ B/ A-grade). -->
<set name="icon" val="icon.r95_soul_stone_i00" />
<set name="material" val="CRYSTAL" />
<set name="is_dropable" val="false" />
<set name="is_stackable" val="true" />
</item>
Вот оружие:
<item id="8678" name="Sirra's Blade" type="Weapon">
<set name="icon" val="icon.weapon_sirr_blade_i00" />
<set name="default_action" val="EQUIP" />
<set name="weapon_type" val="SWORD" />
<set name="bodypart" val="rhand" />
<set name="damage_range" val="0;0;40;120" />
<set name="immediate_effect" val="true" />
<set name="crystal_count" val="2157" />
<set name="crystal_type" val="A" />
<set name="material" val="FINE_STEEL" />
<set name="weight" val="1300" />
<set name="price" val="26968400" />
<set name="change_weaponId" val="9352" />
<set name="soulshots" val="1" />
<set name="spiritshots" val="1" />
<set name="enchant_enabled" val="true" />
<set name="isAppearanceable" val="true" />
<set name="commissionItemType" val="ONE_HAND_SWORD" />
<stats>
 

Вложения

  • dsfsdfdsfsdf.png
    dsfsdfdsfsdf.png
    27,7 КБ · Просмотры: 22
Это точно не в датапаке фиксится, смотри классы связанные с за точкой, найдёшь кристаллы при enchantfail и добавь туда условия типа если енчант больше 6 и енчантфейл аддить предмет игроку. Датапаком точно не поможешь.
 
у них это не работает надо всю систему реализовывать.
 
Уже целый день пытаюсь лопатить датапак, но так и не могу понять как такое реализовать. Есть пушка когда ее точишь выше +6 если она ломается дает кристалы а грейд пушка а грейда, а должно еще давать камень который можно обменять на заточки то есть должно быть два итема, как это реализовать или через датапак это не сделать? Если это делать через ядро где это хотяб искать? Может есть какой то пример
вот сам итем
id="91462" name="Weapon Enhancement Stone" type="EtcItem">
<!-- Take it to Weapon Merchant Galladucci in Giran to exchange for Scroll: Enchant Weapon (D/ C/ B/ A-grade). -->
<set name="icon" val="icon.r95_soul_stone_i00" />
<set name="material" val="CRYSTAL" />
<set name="is_dropable" val="false" />
<set name="is_stackable" val="true" />
</item>
Вот оружие:
<item id="8678" name="Sirra's Blade" type="Weapon">
<set name="icon" val="icon.weapon_sirr_blade_i00" />
<set name="default_action" val="EQUIP" />
<set name="weapon_type" val="SWORD" />
<set name="bodypart" val="rhand" />
<set name="damage_range" val="0;0;40;120" />
<set name="immediate_effect" val="true" />
<set name="crystal_count" val="2157" />
<set name="crystal_type" val="A" />
<set name="material" val="FINE_STEEL" />
<set name="weight" val="1300" />
<set name="price" val="26968400" />
<set name="change_weaponId" val="9352" />
<set name="soulshots" val="1" />
<set name="spiritshots" val="1" />
<set name="enchant_enabled" val="true" />
<set name="isAppearanceable" val="true" />
<set name="commissionItemType" val="ONE_HAND_SWORD" />
<stats>
Костыль небольшой:
java\org\l2jmobius\gameserver\network\clientpackets\RequestEnchantItem.java

Найти:
Код:
case FAILURE:

Найти еще ниже:
Код:
if (Config.LOG_ITEM_ENCHANTS)

И добавить выше:
Код:
int itemIDBonus = 4037; //TODO: config на id предмета, лучше эти оба убрать и сделать списком через разделитель 4037|57
int itemBonusAmount = 5; //TODO: config количество итемов, лучше эти оба убрать и сделать списком через разделитель 5|1000
player.getInventory().addItem("Init", itemIDBonus, itemBonusAmount, player, true);

Лучшим вариантом будет спарсить все предметы которые можно разбить по типу в xml и каждому указать свое количество камней.
 
Костыль небольшой:
java\org\l2jmobius\gameserver\network\clientpackets\RequestEnchantItem.java

Найти:
Код:
case FAILURE:

Найти еще ниже:
Код:
if (Config.LOG_ITEM_ENCHANTS)

И добавить выше:
Код:
int itemIDBonus = 4037; //TODO: config на id предмета, лучше эти оба убрать и сделать списком через разделитель 4037|57
int itemBonusAmount = 5; //TODO: config количество итемов, лучше эти оба убрать и сделать списком через разделитель 5|1000
player.getInventory().addItem("Init", itemIDBonus, itemBonusAmount, player, true);

Лучшим вариантом будет спарсить все предметы которые можно разбить по типу в xml и каждому указать свое количество камней.
Не то что лучшим, а правильным. Я на сколько помню они во первых разные от фейла армора и веапона, плюс кол-во разное в зависимости от уровня точки на которой фейл произошёл, так что пусть пишет функцию отдельную. Костылем особо не обойтись.
 
Так сегодня день помощи, продолжу тему выше по мобиусу hf5.

Открываем файл java\org\l2jmobius\gameserver\model\items\Item.java

Находим:
Код:
private int _crystalCount;

Добавляем ниже:
Код:
    private int _stoneID;
    private int _stoneCount;

Находим ниже:
Код:
        _crystalCount = set.getInt("crystal_count", 0);

Добавляем ниже:
Код:
        _stoneID = set.getInt("stone_id", 0);
        _stoneCount = set.getInt("stone_count", 0);

Находим ниже:
Код:
public int getCrystalCount()

Добавляем выше:
Код:
    public int getStoneID()
    {
        return _stoneID;
    }
  
    public int getStoneCount()
    {
        return _stoneCount;
    }

Теперь открываем файл java\org\l2jmobius\gameserver\network\clientpackets\RequestEnchantItem.java

Находим такой участок кода:
Код:
                            if (Config.LOG_ITEM_ENCHANTS)
                            {
                                if (item.getEnchantLevel() > 0)
                                {
                                    if (support == null)
                                    {
                                        LOGGER_ENCHANT.info("Fail, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", +" + item.getEnchantLevel() + " " + item.getName() + "(" + item.getCount() + ") [" + item.getObjectId() + "], " + scroll.getName() + "(" + scroll.getCount() + ") [" + scroll.getObjectId() + "]");
                                    }
                                    else
                                    {
                                        LOGGER_ENCHANT.info("Fail, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", +" + item.getEnchantLevel() + " " + item.getName() + "(" + item.getCount() + ") [" + item.getObjectId() + "], " + scroll.getName() + "(" + scroll.getCount() + ") [" + scroll.getObjectId() + "], " + support.getName() + "(" + support.getCount() + ") [" + support.getObjectId() + "]");
                                    }
                                }
                                else if (support == null)
                                {
                                    LOGGER_ENCHANT.info("Fail, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", " + item.getName() + "(" + item.getCount() + ") [" + item.getObjectId() + "], " + scroll.getName() + "(" + scroll.getCount() + ") [" + scroll.getObjectId() + "]");
                                }
                                else
                                {
                                    LOGGER_ENCHANT.info("Fail, Character:" + player.getName() + " [" + player.getObjectId() + "] Account:" + player.getAccountName() + " IP:" + player.getIPAddress() + ", " + item.getName() + "(" + item.getCount() + ") [" + item.getObjectId() + "], " + scroll.getName() + "(" + scroll.getCount() + ") [" + scroll.getObjectId() + "], " + support.getName() + "(" + support.getCount() + ") [" + support.getObjectId() + "]");
                                }
                            }

Добавляем выше if (Config.LOG_ITEM_ENCHANTS) вместо кода ранее:
Код:
player.getInventory().addItem("Init", item.getItem().getStoneID(), item.getItem().getStoneCount(), player, true);

Делал на коленке, но суть будет понятна.
Осталось каждому предмету добавить сразу после crystal_count еще две строчки stone_id и stone_count
В stone_id строке указать id предмета скажем 4037 и далее где stone_count количество.

Добавлять нужно здесь, например: dist\game\data\stats\items\09100-09199.xml:

<item id="9141" type="Weapon" name="Redemption Bow">
<!-- Event item. Send a heart with love to select mutated creatures. The active skills "Heart Shot" and "Double Heart Shot" can be used. -->
<set name="icon" val="icon.weapon_krono_bow_i00" />
<set name="default_action" val="EQUIP" />
<set name="weapon_type" val="BOW" />
<set name="bodypart" val="lrhand" />
<set name="random_damage" val="1" />
<set name="attack_range" val="500" />
<set name="damage_range" val="0;0;10;0" />
<set name="immediate_effect" val="true" />
<set name="material" val="WOOD" />
<set name="weight" val="300" />
<set name="soulshots" val="1" />
<set name="spiritshots" val="1" />
<set name="mp_consume" val="1" />
<set name="equip_reuse_delay" val="30" />
<set name="reuse_delay" val="1500" />
<set name="stone_id" val="4037" />
<set name="stone_count" val="5" />
 
Последнее редактирование:
Назад
Сверху Снизу