Cистема апгрейда итемов (542)

Gigi

Прославленный
Проверенный
Легенда Истоков
Старожил I степени
Сообщения
477
Розыгрыши
0
Решения
3
Репутация
219
Реакции
137
Баллы
1 438
Хроники
  1. Master Class
Исходники
Присутствуют
Сборка
Mobius
Cистема апгрейда итемов у кузнеца, у меня на 542 не один итем из списка EquipmentUpgradeData.xml не хочет влезать в окно апгрейда, при этом ошибок сервер не выдаёт.

Shot00004.webp ​
 
реализуй C_EX_UPGRADE_PROB / EX_UPGRADE_PROB
 
реализуй C_EX_UPGRADE_PROB / EX_UPGRADE_PROB
Есть этот пакет
Java:
package org.l2jmobius.gameserver.network.clientpackets.equipmentupgrade;

import org.l2jmobius.gameserver.data.holders.EquipmentUpgradeHolder;
import org.l2jmobius.gameserver.data.xml.EquipmentUpgradeData;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.network.clientpackets.ClientPacket;
import org.l2jmobius.gameserver.network.serverpackets.equipmentupgrade.ExUpgradeProb;

/**
 * @author Lonely
 */
public class RequestUpgradeProb extends ClientPacket
{
    private int _upgradeId;
   
    @Override
    protected void readImpl()
    {
        _upgradeId = readInt();
    }
   
    @Override
    protected void runImpl()
    {
        final Player player = getPlayer();
        if (player == null)
        {
            return;
        }
       
        final EquipmentUpgradeHolder holder = EquipmentUpgradeData.getInstance().getUpgrade(_upgradeId);
        if (holder == null)
        {
            return;
        }
       
        player.sendPacket(new ExUpgradeProb(_upgradeId, 100));
    }
}

EX_UPGRADE_PROB(0x2D6, RequestUpgradeProb::new, ConnectionState.IN_GAME),
 
Есть этот пакет
Java:
package org.l2jmobius.gameserver.network.clientpackets.equipmentupgrade;

import org.l2jmobius.gameserver.data.holders.EquipmentUpgradeHolder;
import org.l2jmobius.gameserver.data.xml.EquipmentUpgradeData;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.network.clientpackets.ClientPacket;
import org.l2jmobius.gameserver.network.serverpackets.equipmentupgrade.ExUpgradeProb;

/**
 * @author Lonely
 */
public class RequestUpgradeProb extends ClientPacket
{
    private int _upgradeId;
  
    @Override
    protected void readImpl()
    {
        _upgradeId = readInt();
    }
  
    @Override
    protected void runImpl()
    {
        final Player player = getPlayer();
        if (player == null)
        {
            return;
        }
      
        final EquipmentUpgradeHolder holder = EquipmentUpgradeData.getInstance().getUpgrade(_upgradeId);
        if (holder == null)
        {
            return;
        }
      
        player.sendPacket(new ExUpgradeProb(_upgradeId, 100));
    }
}

EX_UPGRADE_PROB(0x2D6, RequestUpgradeProb::new, ConnectionState.IN_GAME),
Добавь дополнительно логирование
 
Добавь дополнительно логирование
добавил логер в RequestUpgradeProb перед отсылки сервер пакета

LOGGER.warning(player.getName() + ": ID send successful = " + _upgradeId);
player.sendPacket(new ExUpgradeProb(_upgradeId, 100));

получил значение 1

DarkSummoner: ID send successful = 1
 
Последнее редактирование:
По идее он должен подстовлят ид процесса с хмл, для конкретного случая что на картинке, показывает правильно

<upgrade id="1" item="18001,7" materials="17371,32021;19440,82;47951,234" adena="124592850" result="17382,7" />

Вот потом не понятно что не так когда отправляет на сервер
player.sendPacket(new ExUpgradeProb(_upgradeId, 100));

сам пакет на сервере:
Java:
package org.l2jmobius.gameserver.network.serverpackets.equipmentupgrade;

import org.l2jmobius.commons.network.WritableBuffer;
import org.l2jmobius.gameserver.network.GameClient;
import org.l2jmobius.gameserver.network.ServerPackets;
import org.l2jmobius.gameserver.network.serverpackets.ServerPacket;

/**
 * @author Lonely
 */
public class ExUpgradeProb extends ServerPacket
{
    private final int _upgradeId;
    private final double _probability;
    
    public ExUpgradeProb(int upgradeId, double probability)
    {
        _upgradeId = upgradeId;
        _probability = probability;
    }
    
    @Override
    public void writeImpl(GameClient client, WritableBuffer buffer)
    {
        ServerPackets.EX_UPGRADE_PROB.writeId(this, buffer);
        buffer.writeInt(_upgradeId);
        buffer.writeInt((int) Math.floor(_probability * 10000));
    }
}
 
MrKirill1232 твой выход :loltt0:
Должен отработать номинацию Фанат Мобиуса.
 
В EnterWorld посылай

activeChar.sendPacket(new ExShowUpgradeSystemNormal(0, 1)); оно инициализирует апгрейды в клиенте, так и на оффе судя по сниффам.
 
В EnterWorld посылай

activeChar.sendPacket(new ExShowUpgradeSystemNormal(0, 1)); оно инициализирует апгрейды в клиенте, так и на оффе судя по сниффам.
это больше для работы без НПСа вроде, по доступу с инвентаря
 
В EnterWorld посылай

activeChar.sendPacket(new ExShowUpgradeSystemNormal(0, 1)); оно инициализирует апгрейды в клиенте, так и на оффе судя по сниффам.
Нее, не помогает.

Не хватает чего то при отправке пакета
 
Проверь опкод у серверного пакета

Код:
    EX_USER_RESTART_DEFAULT_STATUS(0xFE, 0x3BF),
    EX_AGATHION_CHANGE_SHAPE(0xFE, 0x3C0),
    EX_MATCHINGINZONE_TEAMBATTLE_PVPVE_ITEMINFO(0xFE, 0x3C1),
    EX_CHARACTER_STYLE_UNREGIST(0xFE, 0x3C2),
    EX_UPGRADE_PROB(0xFE, 0x3C3),
    EX_PARTY_MATCHING_LIST_OUST(0xFE, 0x3C4),
    EX_DAMAGE_POPUP_MULTI_HIT(0xFE, 0x3C5),
    EX_ALLIANCE_CREATE(0xFE, 0x3C6),
    EX_PROB_CONSUME_SKILL_LIST(0xFE, 0x3C7),
    EX_MAX(0xFE, 0x3C8);
 
Проверь опкод у серверного пакета

Код:
    EX_USER_RESTART_DEFAULT_STATUS(0xFE, 0x3BF),
    EX_AGATHION_CHANGE_SHAPE(0xFE, 0x3C0),
    EX_MATCHINGINZONE_TEAMBATTLE_PVPVE_ITEMINFO(0xFE, 0x3C1),
    EX_CHARACTER_STYLE_UNREGIST(0xFE, 0x3C2),
    EX_UPGRADE_PROB(0xFE, 0x3C3),
    EX_PARTY_MATCHING_LIST_OUST(0xFE, 0x3C4),
    EX_DAMAGE_POPUP_MULTI_HIT(0xFE, 0x3C5),
    EX_ALLIANCE_CREATE(0xFE, 0x3C6),
    EX_PROB_CONSUME_SKILL_LIST(0xFE, 0x3C7),
    EX_MAX(0xFE, 0x3C8);

Также всё

Код:
    // 541
    EX_USER_RESTART_DEFAULT_STATUS(0xFE, 0x3BF),
    EX_AGATHION_CHANGE_SHAPE(0xFE, 0x3C0),
    EX_MATCHINGINZONE_TEAMBATTLE_PVPVE_ITEMINFO(0xFE, 0x3C1),
    EX_CHARACTER_STYLE_UNREGIST(0xFE, 0x3C2),
    EX_UPGRADE_PROB(0xFE, 0x3C3),
    EX_PARTY_MATCHING_LIST_OUST(0xFE, 0x3C4),
    EX_DAMAGE_POPUP_MULTI_HIT(0xFE, 0x3C5),
    EX_ALLIANCE_CREATE(0xFE, 0x3C6),
    EX_PROB_CONSUME_SKILL_LIST(0xFE, 0x3C7),
    EX_MAX(0xFE, 0x3C8);
 
Также всё

Код:
    // 541
    EX_USER_RESTART_DEFAULT_STATUS(0xFE, 0x3BF),
    EX_AGATHION_CHANGE_SHAPE(0xFE, 0x3C0),
    EX_MATCHINGINZONE_TEAMBATTLE_PVPVE_ITEMINFO(0xFE, 0x3C1),
    EX_CHARACTER_STYLE_UNREGIST(0xFE, 0x3C2),
    EX_UPGRADE_PROB(0xFE, 0x3C3),
    EX_PARTY_MATCHING_LIST_OUST(0xFE, 0x3C4),
    EX_DAMAGE_POPUP_MULTI_HIT(0xFE, 0x3C5),
    EX_ALLIANCE_CREATE(0xFE, 0x3C6),
    EX_PROB_CONSUME_SKILL_LIST(0xFE, 0x3C7),
    EX_MAX(0xFE, 0x3C8);
IMG_20260408_194942_627.webp
 
Если перевести эти значения в hexdecimal получаются совсем другие пакеты или я что то туплю (это точно из меин версии)

к примеру

EX_UPGRADE_PROB = 1221 получается EX_UPGRADE_PROB(0xFE, 0x4C5) <-- с этим тоже не работает

Потом включил дебагер пакетов при клике на итем трогает тоько эти 2 пакета

[08/04 22:25:53] [C EX] RequestUpgradeProb
[08/04 22:25:53] [S EX] ExUpgradeProb
[08/04 22:25:53] [C EX] RequestUpgradeProb
[08/04 22:25:53] [S EX] ExUpgradeProb
 
Последнее редактирование:
Если перевести эти значения в hexdecimal получаются совсем другие пакеты или я что то туплю (это точно из меин версии)

к примеру

EX_UPGRADE_PROB = 1221 получается EX_UPGRADE_PROB(0xFE, 0x4C5) <-- с этим тоже не работает

Потом включил дебагер пакетов при клике на итем трогает тоько эти 2 пакета

[08/04 22:25:53] [C EX] RequestUpgradeProb
[08/04 22:25:53] [S EX] ExUpgradeProb
[08/04 22:25:53] [C EX] RequestUpgradeProb
[08/04 22:25:53] [S EX] ExUpgradeProb
На мейне к примеру, датка выглядит вот так (прикрепил txt)
Сообщение объединено:
Если перевести эти значения в hexdecimal получаются совсем другие пакеты или я что то туплю (это точно из меин версии)

к примеру

EX_UPGRADE_PROB = 1221 получается EX_UPGRADE_PROB(0xFE, 0x4C5) <-- с этим тоже не работает
ex пакеты вот так:
Сообщение объединено:
Gigi прикрепил еще датку UpgradeSystem_Normal_ClassicAden.dat
 

Вложения

Последнее редактирование:
На мейне к примеру, датка выглядит вот так (прикрепил txt)
Сообщение объединено:
ex пакеты вот так:
Сообщение объединено:
Gigi прикрепил еще датку UpgradeSystem_Normal_ClassicAden.dat
В пакетах нет различия, что у вас что у меня
Может и в правда в датнике дело?
заметил только одно расхождение, при сохранении датника UpgradeSystem

мой эдитор запоминает так
в место applycountry={0;3;8;9;12;14;1;4}
переводит applycountry={kr;tw;ru;eu;pl;es;e;cn}
можно с вашим датником UpgradeSystem.dat попробовать
 
В пакетах нет различия, что у вас что у меня
Может и в правда в датнике дело?
заметил только одно расхождение, при сохранении датника UpgradeSystem

мой эдитор запоминает так
в место applycountry={0;3;8;9;12;14;1;4}
переводит applycountry={kr;tw;ru;eu;pl;es;e;cn}
можно с вашим датником UpgradeSystem.dat попробовать
можно в структуре убрать форматирование по енумерации или в редакторе выключить замену по енумерации
 
можно в структуре убрать форматирование по енумерации или в редакторе выключить замену по енумерации
Отключил
DAT_REPLACEMENT_ENUMS=false
пересохранил, теперь всё одик к одному, но всё рано не помогает, так что тема датника отпадает
 
Также всё

Код:
    // 541
    EX_USER_RESTART_DEFAULT_STATUS(0xFE, 0x3BF),
    EX_AGATHION_CHANGE_SHAPE(0xFE, 0x3C0),
    EX_MATCHINGINZONE_TEAMBATTLE_PVPVE_ITEMINFO(0xFE, 0x3C1),
    EX_CHARACTER_STYLE_UNREGIST(0xFE, 0x3C2),
    EX_UPGRADE_PROB(0xFE, 0x3C3),
    EX_PARTY_MATCHING_LIST_OUST(0xFE, 0x3C4),
    EX_DAMAGE_POPUP_MULTI_HIT(0xFE, 0x3C5),
    EX_ALLIANCE_CREATE(0xFE, 0x3C6),
    EX_PROB_CONSUME_SKILL_LIST(0xFE, 0x3C7),
    EX_MAX(0xFE, 0x3C8);
У тебя неправильный опкод, если судить по названию темы, у тебя 542 протокол, а тут 541, там был сдвиг после нескольких патчей

У сервер пакета в 542 0x3C6, у клиент 0x2D6, если опкоды берешь в интерфейсе, нужно сначала у EX таблицы отнимать 255 у сервер, и 209 у клиент, а потом переводить в hex

ps Советую вообще удалить ид пакетов в энуме если используете таблицу из интерфейса и перейти на ordinal , очень полезно, особенно когда в 520 и 541/542 сдвиг пакетов сделали в центре таблицы и почти всю таблицу пришлось двигать на +1
 

Вложения

  • p542.zip
    p542.zip
    18,8 КБ · Просмотры: 20
Назад
Сверху Снизу