Работа над Goddess of Destruction Glory Days - Страница 4 - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II

Lineage II
Дискуссии на тему создания, настройки и обслуживания серверов Lineage 2. При поддержке: Премиум услуги по рекламе

Ответ
Опции темы
Непрочитано 03.02.2013, 14:10   #31
Аватар для elastic
Ooh, who's that handsome devil?

По умолчанию Re: Работа над Goddess of Destruction Glory Days

Не могу разобраться, в чем проблема. Вроде пакет апнул, а все равно такая фигня.

Код:
public class CharacterSelectionInfo extends L2GameServerPacket {
    private static final Logger _log = LoggerFactory.getLogger(CharacterSelectionInfo.class);

    private String _loginName;

    private int _sessionId;

    private CharSelectionInfo charSelectionInfo;

    public CharacterSelectionInfo(String loginName, int sessionId) {
        _sessionId = sessionId;
        _loginName = loginName;
        charSelectionInfo = loadCharacterSelectInfo(loginName);
    }

    public CharSelectionInfo getCharInfo() {
        return charSelectionInfo;
    }

    @Override
    protected final void writeImpl() {
        int size = charSelectionInfo.size();

        writeC(0x09);
        writeD(size);
        writeD(0x07);
        writeC(0x00);
        writeC(0x01);
        writeD(0x00);

        long lastAccess = -1L;
		int lastUsed = -1;
		for (CharSelectInfoPackage info : charSelectionInfo) 
            if (lastAccess < info.getLastAccess())
			{
				lastAccess = info.getLastAccess();
				lastUsed++;
			}
		int i = 0;
        for (CharSelectInfoPackage charInfoPackage : charSelectionInfo) {
		    writeS(charInfoPackage.getName());
            writeD(charInfoPackage.getCharId()); // ?
            writeS(_loginName);
            writeD(_sessionId);
            writeD(charInfoPackage.getClanId());
            writeD(0x00); // ??

            writeD(charInfoPackage.getSex());
            writeD(charInfoPackage.getRace());
            writeD(charInfoPackage.getBaseClassId());

            
		    writeD(0x01); // default active for all (GOD)

            writeD(charInfoPackage.getX());
            writeD(charInfoPackage.getY());
            writeD(charInfoPackage.getZ());

            writeF(charInfoPackage.getCurrentHp());
            writeF(charInfoPackage.getCurrentMp());

            writeD(charInfoPackage.getSp());
            writeQ(charInfoPackage.getExp());
            writeF(Experience.getExpPercent(charInfoPackage.getLevel(), charInfoPackage.getExp()));
			writeD(charInfoPackage.getLevel());

            writeD(charInfoPackage.getKarma());
            writeD(charInfoPackage.getPk());
            writeD(charInfoPackage.getPvP());

            writeD(0x00);
            writeD(0x00);
            writeD(0x00);
            writeD(0x00);
            writeD(0x00);
            writeD(0x00);
            writeD(0x00);

            for (int PAPERDOLL_ID : Inventory.PAPERDOLL_ORDER)
                writeD(charInfoPackage.getPaperdollItemId(PAPERDOLL_ID));
				
			writeD(0);
			writeD(0);
            writeD(0);
            writeD(0);
            writeD(0);
            writeD(0);
            writeD(0);
            writeD(0);
            writeD(0);
			writeD(charInfoPackage.getHairStyle());
            writeD(charInfoPackage.getHairColor());
            writeD(charInfoPackage.getFace());

            writeF(charInfoPackage.getMaxHp()); // hp max
            writeF(charInfoPackage.getMaxMp()); // mp max

            writeD(charInfoPackage.getAccessLevel() > -100 ? charInfoPackage.getDeleteTimer() : -1);
			writeD(charInfoPackage.getClassId());
			writeD(i == lastUsed ? 1 : 0);
 
			writeC(Math.min(charInfoPackage.getPaperdollEnchantEffect(Inventory.PAPERDOLL_RHAND), 127));
 
			writeH(0x00);
			writeH(0x00);
 
			int weaponId = charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RHAND);
			if (weaponId == 8190) // Transform id
				writeD(301);
			else if (weaponId == 8689)
				writeD(302);
			else
				writeD(0x00);
 
			writeD(0x00);
			writeD(0x00);
			writeD(0x00);
			writeD(0x00);
			writeF(0x00);
			writeF(0x00);

            writeD(charSelectionInfo.getVitalityPoints());
			writeD(0); //?
			writeD(0); //?
            writeD(charInfoPackage.getAccessLevel() > -100 ? 0x01 : 0x00);
			writeC(0x00);
			writeC(0x00);
			i++;
        }
    }
elastic вне форума Отправить сообщение для elastic с помощью ICQ Ответить с цитированием
Непрочитано 03.02.2013, 19:48   #32
Аватар для Mifesto
Пользователь

По умолчанию Re: Работа над Goddess of Destruction Glory Days

Вот мой 488
Код:
public class CharacterSelectionInfo extends L2GameServerPacket
{
    private static final Logger _log = LoggerFactory.getLogger(CharacterSelectionInfo.class);

	private String _loginName;
	private int _sessionId;
	private CharInfoList _charInfoList;

    public CharInfoList getCharInfo()
    {
        return _charInfoList;
    }

	public CharacterSelectionInfo(String loginName, int sessionId)
	{
		_sessionId = sessionId;
        _loginName = loginName;
        _charInfoList = new CharInfoList(loginName);
	}

    @Override
	protected final void writeImpl()
	{
		writeEx(ServerPacket.CharacterSelectionInfo);

        writeD(_charInfoList != null ? _charInfoList.size() : 0);
        writeD(0x07); // Максимальное количество персонажей на сервере
        writeC(0x00); // Разрешает или запрещает создание игроков
        writeC(0x01);
        writeD(0x00);

		for(CharInfoList.CharInfo _charInfo :  _charInfoList)
		{
            writeS(_charInfo.getName());
            writeD(_charInfo.getCharId()); // ?
            writeS(_loginName);
            writeD(_sessionId);
            writeD(_charInfo.getClanId());
            writeD(0x00); // ??

            writeD(_charInfo.getSex());
            writeD(_charInfo.getRace());
            writeD(_charInfo.getBaseClassId());

            writeD(0x01); // active ??

            writeD(_charInfo.getX());
            writeD(_charInfo.getY());
            writeD(_charInfo.getZ());

            writeF(_charInfo.getCurrentHp());
            writeF(_charInfo.getCurrentMp());

            writeD(_charInfo.getSp());
            writeQ(_charInfo.getExp());
            writeF(Experience.getExpPercent(_charInfo.getLevel(), _charInfo.getExp()));
            writeD(_charInfo.getLevel());

            writeD(_charInfo.getKarma());
            writeD(_charInfo.getPk());
            writeD(_charInfo.getPvP());

            for (int j = 0; j < 7; j++)
                writeD(0x00);

            for(int PAPERDOLL_ID : Inventory.PAPERDOLL_ORDER)
                writeD(_charInfo.getPaperdollItemId(PAPERDOLL_ID));

            writeD(_charInfo.getPaperdollVisualId(Inventory.PAPERDOLL_RHAND)); //Внешний вид оружия (ИД Итема).
            writeD(_charInfo.getPaperdollVisualId(Inventory.PAPERDOLL_LHAND)); //Внешний вид щита (ИД Итема).
            writeD(_charInfo.getPaperdollVisualId(Inventory.PAPERDOLL_GLOVES)); //Внешний вид перчаток (ИД Итема).
            writeD(_charInfo.getPaperdollVisualId(Inventory.PAPERDOLL_CHEST)); //Внешний вид верха (ИД Итема).
            writeD(_charInfo.getPaperdollVisualId(Inventory.PAPERDOLL_LEGS)); //Внешний вид низа (ИД Итема).
            writeD(_charInfo.getPaperdollVisualId(Inventory.PAPERDOLL_FEET)); //Внешний вид ботинок (ИД Итема).
            writeD(0);
            writeD(_charInfo.getPaperdollVisualId(Inventory.PAPERDOLL_HAIR)); //Внешний вид шляпы (ИД итема).
            writeD(_charInfo.getPaperdollVisualId(Inventory.PAPERDOLL_DHAIR)); //Внешний вид маски (ИД итема).

            writeD(_charInfo.getHairStyle());
            writeD(_charInfo.getHairColor());
            writeD(_charInfo.getFace());

            writeF(_charInfo.getMaxHp()); // hp max
            writeF(_charInfo.getMaxMp()); // mp max

            writeD(_charInfo.getAccessLevel() > -100 ? _charInfo.getDeleteTime() : -1);
            writeD(_charInfo.getClassId());
            writeD(_charInfo.isLast() ? 1 : 0);

            writeC(Math.min(_charInfo.getPaperdollEnchantEffect(Inventory.PAPERDOLL_RHAND), 127));

            writeH(0x00);
            writeH(0x00);

            int weaponId = _charInfo.getPaperdollItemId(Inventory.PAPERDOLL_RHAND);
            if (weaponId == 8190) // Transform id
                writeD(301);
            else if (weaponId == 8689)
                writeD(302);
            else
                writeD(0x00);

            for (int j = 0; j < 4; j++)
                writeD(0x00);

            writeF(0x00);
            writeF(0x00);

            writeD(getClient().getVitalityPoints()); // Vitality Points
            writeD(getClient().getVitalityPercent()); // Vitality percent
            writeD(getClient().getVitalityItemCounts()); //Vitaliti items count
            writeD(_charInfo.getAccessLevel() > -100 ? 0x01 : 0x00); // Access level
            writeC(0x00);
            writeC(0x00);
		}
	}
}
Протокол какой используете?

Последний раз редактировалось Mifesto; 03.02.2013 в 20:12.
Mifesto вне форума Отправить сообщение для Mifesto с помощью ICQ Ответить с цитированием
Сказали спасибо:
Непрочитано 03.02.2013, 21:39   #33
Аватар для elastic
Ooh, who's that handsome devil?

По умолчанию Re: Работа над Goddess of Destruction Glory Days

Работаю с 488 протоколом.

Никто не подскажет, какие serverpackets отвечают за вход в игру? Бьюсь уже второй день: при попытке зайти в игру, окно загрузки виснет, а через некоторое время вылез в гс 0xd0=221 и пара ошибок при чтении клиент_пакетов.
Неужели надо в каждом серверном пакете менять опкод?

Последний раз редактировалось elastic; 04.02.2013 в 18:58. Причина: Добавлено сообщение
elastic вне форума Отправить сообщение для elastic с помощью ICQ Ответить с цитированием
Непрочитано 05.02.2013, 07:59   #34
Аватар для Gaikotsu
Герой

По умолчанию Re: Работа над Goddess of Destruction Glory Days

а все опкоды расширенных пакетов корректно сдвинул?
Gaikotsu вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 05.02.2013, 10:56   #35
Аватар для elastic
Ooh, who's that handsome devil?

По умолчанию Re: Работа над Goddess of Destruction Glory Days

Цитата:
Сообщение от Gaikotsu Посмотреть сообщение
а все опкоды расширенных пакетов корректно сдвинул?
Поподробнее, пожалуйста. С пакеткой связался первый раз.

Добавлено через 9 минут
Пакеты с приставкой Ex ?

Последний раз редактировалось elastic; 05.02.2013 в 11:07. Причина: Добавлено сообщение
elastic вне форума Отправить сообщение для elastic с помощью ICQ Ответить с цитированием
Непрочитано 05.02.2013, 11:12   #36
Аватар для Gaikotsu
Герой

По умолчанию Re: Работа над Goddess of Destruction Glory Days

да
начиная с 448 или 449 протокола (не помню уж) - все расширенные пакеты сдвинулись на единицу - http://www.l2jserver.com/forum/viewt...p?f=90&t=26548
P.S. только списки бери из архива в последнем сообщении темы - в первом там рсширенные коды ошибочны - сдвиг больше чем надо.

+ там только для 479 протокола, но в большинстве своем там совдпадает все с 488, только в 488 сразу после 0xFE:0x13B: ExAbnormalVisualEffectInfo вставили еще один пакет, так что следующие надо еще на единицу сдвинуть.

и вобще - сделай задавание опкодов пакетов через enum, вон как у Mifesto сделано (да и я тоже подобным образом сделал недавно) - намного удобней будет при необходимости исправлять числовые значения опкодов в одном файле, чем перебирать кучу классов с самими с пакетами.
Gaikotsu вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 05.02.2013, 12:05   #37
Аватар для elastic
Ooh, who's that handsome devil?

По умолчанию Re: Работа над Goddess of Destruction Glory Days

Доходчиво и понятно. Спасибо, будем пробовать
elastic вне форума Отправить сообщение для elastic с помощью ICQ Ответить с цитированием
Непрочитано 05.02.2013, 12:13   #38
Забанен за кидаловo/обман/развод

По умолчанию Re: Работа над Goddess of Destruction Glory Days

	/**
	 * Формируем опКод пакета по Енуму, воизбежание проблем и заморочек с протоколами.
	 * Только для Extended пакетов (FE).
	 */
	protected void writeFe(Class<?> className)
	{
		int opCode = L2ServerPacketFEList.valueOf(className.getSimpleName()).ordinal();
 
		writeEx(opCode);
	}
Code: Java
Список пакетов(488 протокол)
enum:
Свернуть ↑Развернуть ↓
KilRoy вне форума Отправить сообщение для KilRoy с помощью ICQ Отправить сообщение для KilRoy с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 06.02.2013, 17:42   #39
Аватар для elastic
Ooh, who's that handsome devil?

По умолчанию Re: Работа над Goddess of Destruction Glory Days

Сдвинул опкоды у всех Ex пакетов, characterSelectedInfo\charInfo сделал. Но при входе в игру по прежнему все виснет и ГС пишет 0x0d=221.
Я уже не знаю, в чем проблема :<
Никто не знает случаем?

Последний раз редактировалось elastic; 06.02.2013 в 18:29.
elastic вне форума Отправить сообщение для elastic с помощью ICQ Ответить с цитированием
Непрочитано 06.02.2013, 18:15   #40
Аватар для VISTALL
Illussion is real

По умолчанию Re: Работа над Goddess of Destruction Glory Days

Цитата:
Сообщение от KilRoy Посмотреть сообщение
	/**
	 * Формируем опКод пакета по Енуму, воизбежание проблем и заморочек с протоколами.
	 * Только для Extended пакетов (FE).
	 */
	protected void writeFe(Class<?> className)
	{
		int opCode = L2ServerPacketFEList.valueOf(className.getSimpleName()).ordinal();
 
		writeEx(opCode);
	}
Code: Java
уж неудержался.

Ты сам знаеш - что да как?

Например как разворащивается valueOf? - ок один цыкл. No problem

Но блин - getSimpleName(), ты смотрел?
__________________
consulo.io - Consulo - multi-language IDE
VISTALL вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 2 (пользователей: 0 , гостей: 2)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа над Goddess of Destruction (part 2) Ozzy Lineage II 411 22.06.2011 15:58
Работа над Goddess of Destruction JaFo Lineage II 409 20.05.2011 01:48
Объединённый клиент Lineage II Goddess of Destruction и Aion 2.5 TieLay Aion 9 01.04.2011 22:28
Объединённый клиент Lineage II Goddess of Destruction и Aion 2.5 TieLay Lineage II 0 01.04.2011 09:11
Адаптируем SQL BimBom Работа со скриптами 9 14.10.2009 15:14


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 00:15. Часовой пояс GMT +3.

Вверх