Рейтинг темы:
  • 2 Голос(ов) - 5 в среднем
  • 1
  • 2
  • 3
  • 4
  • 5
Работа над Goddess of Destruction (part 6)
Вопрос по новым абилкам эпизода: при попытке купить одно очко клиент отправляет RequestChangeAbilityPoint? Если да, то какая у него структура? В дампе ее нет Sad
elastic Написал:Вопрос по новым абилкам эпизода: при попытке купить одно очко клиент отправляет RequestChangeAbilityPoint? Если да, то какая у него структура? В дампе ее нет Sad

[src='c++']
int __thiscall UNetworkHandler::RequestChangeAbilityPoint(int this)
{
int result; // eax@1
int v2; // [sp+0h] [bp-2Ch]@1
int *v3; // [sp+1Ch] [bp-10h]@1
int v4; // [sp+28h] [bp-4h]@1

v3 = &v2;
v4 = 0;
(*(void (__cdecl **)(_DWORD, _DWORD, signed int, signed int))(**(_DWORD **)(this + 72) + 108))(
*(_DWORD *)(this + 72),
"ch",
208,
236);
result = *(_DWORD *)dword_205A4400;
if ( *(_DWORD *)dword_205A4400 )
result = v15051730(result, L"(Send)%s", &asc_2064D158[17]);
return result;
}
[/src]

ch - опкод. То есть у него структура "пустая", а runImpl() идет снятие SP, добавление абилити-очка и отправка ExAcquireAPSkillList.

И это, лучше всего делать реверс в C++ с помощью IDA, ибо в нем больше инфы.
Доброго времени суток Господа
Эртейки у меня по воздуху летают=))))
кто может помочь с данной проблемой? Collision`ы выставлял различные, толку 0

+ так и не могу разобраться с брошками=((( в неё камни не влазят, словно ювелир с размером накосячил+)
silvermain Написал:Доброго времени суток Господа
Эртейки у меня по воздуху летают=))))
кто может помочь с данной проблемой? Collision`ы выставлял различные, толку 0

+ так и не могу разобраться с брошками=((( в неё камни не влазят, словно ювелир с размером накосячил+)
Такое только с артейками или со всеми? Если со всеми, то ищите косяк в UserInfo. Если нет, то смотрите, где задаются колижены для всех остальных рас.
По второму: скорее всего со слотами накосячили.
elastic Написал:Такое только с артейками или со всеми? Если со всеми, то ищите косяк в UserInfo. Если нет, то смотрите, где задаются колижены для всех остальных рас.
По второму: скорее всего со слотами накосячили.


1-е такое только с Артейками
Заранее камнями не кидаться=)
2-е ммм, я так и не понял как правильно прописать брошки и камушки=)
10 раз перечитывал как должно получиться, и толку 0

у меня так:
L2Item
Inventory
+ ко всему, если отправляю в CharacterSelectionInfo всё сразу, то у меня начинает тупить и в лобби все серые и не активные
L2GameServerPacket
silvermain Написал:1-е такое только с Артейками
Заранее камнями не кидаться=)
2-е ммм, я так и не понял как правильно прописать брошки и камушки=)
10 раз перечитывал как должно получиться, и толку 0

у меня так:
L2Item
Inventory
+ ко всему, если отправляю в CharacterSelectionInfo всё сразу, то у меня начинает тупить и в лобби все серые и не активные
L2GameServerPacket
В лобби и надо отправлять все слоты. Кто-то скидывал структуру пакета CharacterSelectionInfo, там после D-шки pvp есть цикл с отправкой 14-ти D-шек.
Цитата:for (int j = 0; j < 14; j++)
{
writeD(0x00);
}
Убавьте до 7, ибо остальные 7 - и есть брошка и камушки.
Чтобы брошь и камни одевались, Вам нужно изменить те методы, где используются остальные слоты. Сделайте по примеру браслета и талисманов, все то же самое.
elastic Написал:В лобби и надо отправлять все слоты. Кто-то скидывал структуру пакета CharacterSelectionInfo, там после D-шки pvp есть цикл с отправкой 14-ти D-шек.

Убавьте до 7, ибо остальные 7 - и есть брошка и камушки.
Чтобы брошь и камни одевались, Вам нужно изменить те методы, где используются остальные слоты. Сделайте по примеру браслета и талисманов, все то же самое.

CharSelectionInfo

вот так у меня, и понять не могу почему=(((
silvermain Написал:
CharSelectionInfo

вот так у меня, и понять не могу почему=(((Попробуйте.
Код
На счет высоты расы Артеас - нужно тестить в начальных статах (тимплейтах), height/collisionHeight или тому подобное.
На счет брошек и камней - делается по аналогии с браслетом и талисманами, только в UserInfo после инфы о доступных слотах таликов отправляется инфа о доступных слотах камней (инфа о плаще не нужна, так как теперь его можно носить без ограничений).

Добавлено через 6 минут
Моя структура (при чем полностью разжеванная с минимумом циклов):

[src='java']
@Override
protected final void writeImpl()
{
int size = charSelectionInfo.size();
writeC(0x09);
writeD(size);
writeD(0x07);
writeC(0x00);
writeC(0x01);
writeD(0x02);
writeC(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);
writeD(charInfoPackage.getX());
writeD(charInfoPackage.getY());
writeD(charInfoPackage.getZ());
writeF(charInfoPackage.getCurrentHp());
writeF(charInfoPackage.getCurrentMp());
writeQ(charInfoPackage.getSp());
writeQ(charInfoPackage.getExp());
int lvl = charInfoPackage.getLevel();
writeF(Experience.getExpPercent(lvl, charInfoPackage.getExp()));
writeD(lvl);
writeD(charInfoPackage.getKarma());
writeD(charInfoPackage.getPk());
writeD(charInfoPackage.getPvP());

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

writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_UNDER));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_REAR));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_NECK));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RBRACELET));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LBRACELET));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO1));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO2));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO3));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO4));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO5));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO6));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_BELT));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_BROACH));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_STONE1));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_STONE2));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_STONE3));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_STONE4));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_STONE5));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_STONE6));

writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_RHAND));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_LHAND));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_GLOVES));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_CHEST));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_LEGS));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_FEET));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_LRHAND));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_HAIR));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_DHAIR));

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

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));
writeD(charInfoPackage.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
int weaponId = charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RHAND);

if (weaponId == 8190)
{
writeD(301);
}
else if (weaponId == 8689)
{
writeD(302);
}
else
{
writeD(0x00);
}

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

writeF(0.0D);
writeF(0.0D);

writeD(charSelectionInfo.getVitalityPoints());
writeD(200); // Vitality percent
writeD(5); // Vitaliti items count
writeD(charInfoPackage.getAccessLevel() > -100 ? 0x01 : 0x00);

writeC(0x00);
writeC(0x00);
writeC(0x00);
i++;
}
}
[/src]

Добавлено через 7 минут
За "бегающий текст" извиняюсь, просто часть делалась в текстовике, где при Tab используется табуляция (\t), а часть в ИДЕшке, в которой табуляция заменяется 4-мя пробелами.

Добавлено через 11 минут
Кстати, кто-то сниффал на одиссее? Если можно, мне бы несколько pLog или psl файликов (пакет-логов).
Warencense Написал:На счет высоты расы Артеас - нужно тестить в начальных статах (тимплейтах), height/collisionHeight или тому подобное.
На счет брошек и камней - делается по аналогии с браслетом и талисманами, только в UserInfo после инфы о доступных слотах таликов отправляется инфа о доступных слотах камней (инфа о плаще не нужна, так как теперь его можно носить без ограничений).

Добавлено через 6 минут
Моя структура (при чем полностью разжеванная с минимумом циклов):

[src='java']
@Override
protected final void writeImpl()
{
int size = charSelectionInfo.size();
writeC(0x09);
writeD(size);
writeD(0x07);
writeC(0x00);
writeC(0x01);
writeD(0x02);
writeC(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);
writeD(charInfoPackage.getX());
writeD(charInfoPackage.getY());
writeD(charInfoPackage.getZ());
writeF(charInfoPackage.getCurrentHp());
writeF(charInfoPackage.getCurrentMp());
writeQ(charInfoPackage.getSp());
writeQ(charInfoPackage.getExp());
int lvl = charInfoPackage.getLevel();
writeF(Experience.getExpPercent(lvl, charInfoPackage.getExp()));
writeD(lvl);
writeD(charInfoPackage.getKarma());
writeD(charInfoPackage.getPk());
writeD(charInfoPackage.getPvP());

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

writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_UNDER));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_REAR));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LEAR));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_NECK));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RFINGER));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LFINGER));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_HEAD));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RHAND));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LHAND));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_GLOVES));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_CHEST));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LEGS));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_FEET));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_BACK));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LRHAND));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_HAIR));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DHAIR));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RBRACELET));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_LBRACELET));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO1));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO2));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO3));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO4));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO5));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_DECO6));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_BELT));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_BROACH));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_STONE1));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_STONE2));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_STONE3));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_STONE4));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_STONE5));
writeD(charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_STONE6));

writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_RHAND));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_LHAND));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_GLOVES));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_CHEST));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_LEGS));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_FEET));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_LRHAND));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_HAIR));
writeD(charInfoPackage.getVisualItemId(Inventory.PAPERDOLL_DHAIR));

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

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));
writeD(charInfoPackage.getPaperdollAugmentationId(Inventory.PAPERDOLL_RHAND));
int weaponId = charInfoPackage.getPaperdollItemId(Inventory.PAPERDOLL_RHAND);

if (weaponId == 8190)
{
writeD(301);
}
else if (weaponId == 8689)
{
writeD(302);
}
else
{
writeD(0x00);
}

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

writeF(0.0D);
writeF(0.0D);

writeD(charSelectionInfo.getVitalityPoints());
writeD(200); // Vitality percent
writeD(5); // Vitaliti items count
writeD(charInfoPackage.getAccessLevel() > -100 ? 0x01 : 0x00);

writeC(0x00);
writeC(0x00);
writeC(0x00);
i++;
}
}
[/src]

Добавлено через 7 минут
За "бегающий текст" извиняюсь, просто часть делалась в текстовике, где при Tab используется табуляция (\t), а часть в ИДЕшке, в которой табуляция заменяется 4-мя пробелами.

Добавлено через 11 минут
Кстати, кто-то сниффал на одиссее? Если можно, мне бы несколько pLog или psl файликов (пакет-логов).
Это конечно сильно :redlol:
Код


Возможно похожие темы ...
Тема Автор Ответы Просмотры Последний пост
  Работа над Goddess of Destruction (part 7) n3k0nation 459 174,292 03-21-2022, 04:21 PM
Последний пост: TieLay
  Помогите с Сервером L2Dream версии 439 для Lineage 2 Gracia Part 2 CAHTEX 4 3,380 10-01-2021, 02:40 PM
Последний пост: tenor
  Работа с камерой и Энтер чат FriendlyGhost 0 1,301 04-29-2018, 06:07 AM
Последний пост: FriendlyGhost
  Goddess of Destruction ( новая ветка от NcSoft ) Bacek 180 59,012 08-22-2017, 12:32 PM
Последний пост: BadStealth
  EmuRT Gracia part 2 ? knaif 3 1,622 02-08-2016, 01:19 PM
Последний пост: knaif
  Gracia Part 1 от l2emu исходы TFH 6 1,964 10-05-2015, 07:53 PM
Последний пост: G1ta0
  Ищу исходы L2-Dream gracia part 2 knaif 1 1,385 10-05-2015, 07:51 PM
Последний пост: G1ta0
  Оплачиваемая работа Grek1993 1 1,349 08-01-2015, 11:29 AM
Последний пост: ztaecz
  Работа с мультиселлом Evencelance 11 2,446 09-19-2014, 12:43 PM
Последний пост: Evencelance
  Работа над Goddess of Destruction (part 5) Ozzy 980 339,178 10-09-2013, 09:13 AM
Последний пост: Ashe

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


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