L2Emu Unique

Статус
В этой теме нельзя размещать новые ответы.

Soanymore

Выдающийся
Только чтение
Сообщения
191
Розыгрыши
0
Репутация
23
Реакции
491
Баллы
1 393
Запустить, запустилось, а кто сможет показать на примере какого нить сервера, как она ваще работает
 

Там есть readme и usage на английском. В них расписан весь принцип действия и Quick Start Guide.
Как она работает? Снифает пакеты и отображает их в куда более читабельном виде, используя для этого xml-схемы для каждого протокола (точнее полноценная схема там вроде одна, а остальные наследуются от нее). Ну и как результат, получается цветастый и удобный сниффер пакетов ла2.
 
В последнее время отказывается у меня работать с lineage2.com, может неверно настраиваю, но не заходит на ГС и выбивает ошибку в консоли снифера. Пришлось пилить свое, с минимальным функционалом.
unknown.png
 
Последнее редактирование модератором:
Я его только на фришке смог настроить(к своему проекту пробывал), к оффу чет вообще не подключает, хз что не так делаю.

P.S я делаю так, беру самурай и потом лог с него запускаю в l2 emu и смотрю. Чтобы не заморачиваться с настройкой.
 
Последнее редактирование:
В последнее время отказывается у меня работать с lineage2.com, может неверно настраиваю, но не заходит на ГС и выбивает ошибку в консоли снифера. Пришлось пилить свое, с минимальным функционалом.
unknown.png
Поделишься?)
 
а нечем, там только база, сегодня начну пилить парсеры.
 
а нечем, там только база, сегодня начну пилить парсеры.
Я знаю ты в курсе, хроники Helios, запустил сервер, ввожу логин\пароль все ок, далее выбор сервера, выбираю и он обратно меня выкидывает на ввод логина\пароль, какой пакет за это отвечает?
 
Loginfail или новое его название Loginresult. Он изменялся в хелиосе.
 
Loginfail или новое его название Loginresult. Он изменялся в хелиосе.
По идее у пакетника io и helios небольшая разница, он должен хотябы до выбора перса заходить с клиента Helios, но у меня почему то обратно выкидывает на окно логина
 
В пакете PlayerAuthResponse необходимо добавить
Код:
client.sendPacket(LoginResultPacket.SUCCESS);

перед отправкой CharacterSelectionInfoPacket

Структуру пакета где то выкладывали:
Код:
public class LoginResultPacket extends L2GameServerPacket
{
    public static L2GameServerPacket SUCCESS = new LoginResultPacket(0xFFFFFFFF, 0);
    public static L2GameServerPacket SYSTEM_ERROR_LOGIN_LATER = new LoginResultPacket(0, 1);
    public static L2GameServerPacket PASSWORD_DOES_NOT_MATCH_THIS_ACCOUNT = new LoginResultPacket(0, 2);
    public static L2GameServerPacket PASSWORD_DOES_NOT_MATCH_THIS_ACCOUNT2 = new LoginResultPacket(0, 3);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER = new LoginResultPacket(0, 4);
    public static L2GameServerPacket INCORRECT_ACCOUNT_INFO_CONTACT_CUSTOMER_SUPPORT = new LoginResultPacket(0, 5);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER2 = new LoginResultPacket(0, 6);
    public static L2GameServerPacket ACOUNT_ALREADY_IN_USE = new LoginResultPacket(0, 7);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER3 = new LoginResultPacket(0, 8);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER4 = new LoginResultPacket(0, 9);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER5 = new LoginResultPacket(0, 10);

    private final int _reason1;
    private final int _reason2;

    public LoginResultPacket(int reason1, int reason2)
    {
        _reason1 = reason1;
        _reason2 = reason2;
    }

    @Override
    protected final void writeImpl()
    {
        writeD(_reason1);
        writeD(_reason2);
    }
}
 
Этот пакет не давал войти с 64 протокола. Там изменилась структура+ нужно теперь послать о успешном входе в другом пакете.

UPD: ПОКА ОТВЕЧАЛ ОТВЕТИЛИ) ВЫШЕ
И про опкод не задудьте, в пакете выше от вынесен.
 
Последнее редактирование:
Этот пакет не давал войти с 64 протокола. Там изменилась структура+ нужно теперь послать о успешном входе в другом пакете.

UPD: ПОКА ОТВЕЧАЛ ОТВЕТИЛИ) ВЫШЕ
И про опкод не задудьте, в пакете выше от вынесен.
Получаеться раньше Fail был, а щас result?
 
В пакете PlayerAuthResponse необходимо добавить
Код:
client.sendPacket(LoginResultPacket.SUCCESS);

перед отправкой CharacterSelectionInfoPacket

Структуру пакета где то выкладывали:
Код:
public class LoginResultPacket extends L2GameServerPacket
{
    public static L2GameServerPacket SUCCESS = new LoginResultPacket(0xFFFFFFFF, 0);
    public static L2GameServerPacket SYSTEM_ERROR_LOGIN_LATER = new LoginResultPacket(0, 1);
    public static L2GameServerPacket PASSWORD_DOES_NOT_MATCH_THIS_ACCOUNT = new LoginResultPacket(0, 2);
    public static L2GameServerPacket PASSWORD_DOES_NOT_MATCH_THIS_ACCOUNT2 = new LoginResultPacket(0, 3);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER = new LoginResultPacket(0, 4);
    public static L2GameServerPacket INCORRECT_ACCOUNT_INFO_CONTACT_CUSTOMER_SUPPORT = new LoginResultPacket(0, 5);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER2 = new LoginResultPacket(0, 6);
    public static L2GameServerPacket ACOUNT_ALREADY_IN_USE = new LoginResultPacket(0, 7);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER3 = new LoginResultPacket(0, 8);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER4 = new LoginResultPacket(0, 9);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER5 = new LoginResultPacket(0, 10);

    private final int _reason1;
    private final int _reason2;

    public LoginResultPacket(int reason1, int reason2)
    {
        _reason1 = reason1;
        _reason2 = reason2;
    }

    @Override
    protected final void writeImpl()
    {
        writeD(_reason1);
        writeD(_reason2);
    }
}
В пакете PlayerAuthResponse.java, перед
Код:
CharacterSelectionInfoPacket csi = new CharacterSelectionInfoPacket(client.getLogin(), client.getSessionKey().playOkID1);
Добавил:
Код:
client.sendPacket(LoginFail.SUCCESS);

При сборке ругается на:
Код:
client.close(new LoginFail(LoginFail.ACCESS_FAILED_TRY_LATER));
Меняю на:
Код:
client.close(null);

Все ок, теперь пытаюсь зайти:
ERROR s2c.L2GameServerPacket: Cannot find serverpacket opcode: LoginFail!
 
Поменять
client.close(new LoginFail(LoginFail.ACCESS_FAILED_TRY_LATER));
на
client.close(LoginFail.ACCESS_FAILED_TRY_LATER);

насчет опкода накосячили гдето, возможно в опкодах он у вас loginfailpacket проверьте.
 
Поменять
client.close(new LoginFail(LoginFail.ACCESS_FAILED_TRY_LATER));
на
client.close(LoginFail.ACCESS_FAILED_TRY_LATER);

начет опкода накосячили гдето
Код:
public class LoginFail extends L2GameServerPacket
{
    public static L2GameServerPacket SUCCESS = new LoginFail(0xFFFFFFFF, 0);
    public static L2GameServerPacket SYSTEM_ERROR_LOGIN_LATER = new LoginFail(0, 1);
    public static L2GameServerPacket PASSWORD_DOES_NOT_MATCH_THIS_ACCOUNT = new LoginFail(0, 2);
    public static L2GameServerPacket PASSWORD_DOES_NOT_MATCH_THIS_ACCOUNT2 = new LoginFail(0, 3);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER = new LoginFail(0, 4);
    public static L2GameServerPacket INCORRECT_ACCOUNT_INFO_CONTACT_CUSTOMER_SUPPORT = new LoginFail(0, 5);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER2 = new LoginFail(0, 6);
    public static L2GameServerPacket ACOUNT_ALREADY_IN_USE = new LoginFail(0, 7);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER3 = new LoginFail(0, 8);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER4 = new LoginFail(0, 9);
    public static L2GameServerPacket ACCESS_FAILED_TRY_LATER5 = new LoginFail(0, 10);

    private final int _reason1;
    private final int _reason2;

    public LoginFail(int reason1, int reason2)
    {
        _reason1 = reason1;
        _reason2 = reason2;
    }

    @Override
    protected final void writeImpl()
    {
        writeD(_reason1);
        writeD(_reason2);
    }
}
 
Если у вас не l2scripts-подобная сборка добавьте опкод

public class LoginFail extends L2GameServerPacket
{
public static L2GameServerPacket SUCCESS = new LoginFail(0xFFFFFFFF, 0);
public static L2GameServerPacket SYSTEM_ERROR_LOGIN_LATER = new LoginFail(0, 1);
public static L2GameServerPacket PASSWORD_DOES_NOT_MATCH_THIS_ACCOUNT = new LoginFail(0, 2);
public static L2GameServerPacket PASSWORD_DOES_NOT_MATCH_THIS_ACCOUNT2 = new LoginFail(0, 3);
public static L2GameServerPacket ACCESS_FAILED_TRY_LATER = new LoginFail(0, 4);
public static L2GameServerPacket INCORRECT_ACCOUNT_INFO_CONTACT_CUSTOMER_SUPPORT = new LoginFail(0, 5);
public static L2GameServerPacket ACCESS_FAILED_TRY_LATER2 = new LoginFail(0, 6);
public static L2GameServerPacket ACOUNT_ALREADY_IN_USE = new LoginFail(0, 7);
public static L2GameServerPacket ACCESS_FAILED_TRY_LATER3 = new LoginFail(0, 8);
public static L2GameServerPacket ACCESS_FAILED_TRY_LATER4 = new LoginFail(0, 9);
public static L2GameServerPacket ACCESS_FAILED_TRY_LATER5 = new LoginFail(0, 10);

private final int _reason1;
private final int _reason2;

public LoginFail(int reason1, int reason2)
{
_reason1 = reason1;
_reason2 = reason2;
}

@Override
protected final void writeImpl()
{
writeC(0x0a);
writeD(_reason1);
writeD(_reason2);
}
}
 
Если у вас не l2scripts-подобная сборка добавьте опкод

public class LoginFail extends L2GameServerPacket
{
public static L2GameServerPacket SUCCESS = new LoginFail(0xFFFFFFFF, 0);
public static L2GameServerPacket SYSTEM_ERROR_LOGIN_LATER = new LoginFail(0, 1);
public static L2GameServerPacket PASSWORD_DOES_NOT_MATCH_THIS_ACCOUNT = new LoginFail(0, 2);
public static L2GameServerPacket PASSWORD_DOES_NOT_MATCH_THIS_ACCOUNT2 = new LoginFail(0, 3);
public static L2GameServerPacket ACCESS_FAILED_TRY_LATER = new LoginFail(0, 4);
public static L2GameServerPacket INCORRECT_ACCOUNT_INFO_CONTACT_CUSTOMER_SUPPORT = new LoginFail(0, 5);
public static L2GameServerPacket ACCESS_FAILED_TRY_LATER2 = new LoginFail(0, 6);
public static L2GameServerPacket ACOUNT_ALREADY_IN_USE = new LoginFail(0, 7);
public static L2GameServerPacket ACCESS_FAILED_TRY_LATER3 = new LoginFail(0, 8);
public static L2GameServerPacket ACCESS_FAILED_TRY_LATER4 = new LoginFail(0, 9);
public static L2GameServerPacket ACCESS_FAILED_TRY_LATER5 = new LoginFail(0, 10);

private final int _reason1;
private final int _reason2;

public LoginFail(int reason1, int reason2)
{
_reason1 = reason1;
_reason2 = reason2;
}

@Override
protected final void writeImpl()
{
writeC(0x0a);
writeD(_reason1);
writeD(_reason2);
}
}
Не все равно на опкод ругаеться
 
А у вас есть такой класс?
ServerPacketOpcodes.java? Посмотрите там. Если такой класс есть?
Сборка какая?
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху Снизу