А протокол какой?Привет!
Завалялся у меня дамп engine.dll (декомпилированный так сказать), и теперь думаю, а как структуру пакета от туда достать
Смотрю - а там коды какие-то, ищу по кодам - фигня какая-то...
Если есть гайд где-то - прошу ссылку.
( искомый пакет - S_EX_DIE_INFO )
Я вижу просто v×циферки× S_EX_DIE_INFOА протокол какой?
В иде ищешь exDieInfo в строках (shift + f12 открывает окно строк) и там будут ссылки на нужную ф-цию в которой будет структура
dword_20B19C5C = (int)sub_20307C00;
appStrncpy((wchar_t *)dword_20B19C60, L"S_EX_DIE_IN_ARENA_TMP", 32);
MrKirill1232, а если поиском по фразе S_EX_DIE_INFO по "декомпилированному" файлу engine, как выглядит код строки с S_EX_DIE_INFO, +предыдущая?
пример о чем речь
C:dword_20B19C5C = (int)sub_20307C00; appStrncpy((wchar_t *)dword_20B19C60, L"S_EX_DIE_IN_ARENA_TMP", 32);
sub_2022B8B0((char *)&off_20FD98BC, (int)sub_2057AEB0, (int)L"S_EX_PAYBACK_UI_LAUNCHER", v797);
sub_2022B8B0((char *)&off_20FD9900, (int)sub_2057AEB0, (int)L"S_EX_DIE_INFO", v798);
sub_2022B8B0((char *)&off_20FD9944, (int)sub_2057AEB0, (int)L"S_EX_AUTOPLAY_SETTING", v799);
sub_2022B8B0((char *)&off_20FD98BC, (int)sub_20521BC0, (int)L"S_EX_PAYBACK_UI_LAUNCHER", v1736);
sub_2022B8B0((char *)&off_20FD9900, (int)sub_20521580, (int)L"S_EX_DIE_INFO", v1737);
sub_2022B8B0((char *)&off_20FD9944, (int)sub_2051E6B0, (int)L"S_EX_AUTOPLAY_SETTING", v1738);
// 20B3179C: using guessed type wchar_t aS_ex_payback_u[25];
// 20B317D0: using guessed type wchar_t aS_ex_die_info[14];
// 20B317EC: using guessed type wchar_t aS_ex_autoplay_[22];
v1500AA30(&v320, L"S_EX_PAYBACK_UI_LAUNCHER");
v1983 = 1813;
sub_2039B880((int)&v1981, (int)&v320);
v1983 = 1;
v1500ACE0(&v320);
v1500AA30(&v318, L"S_EX_DIE_INFO");
v1983 = 1814;
sub_2039B880((int)&v1981, (int)&v318);
v1983 = 1;
v1500ACE0(&v318);
v1500AA30(&v316, L"S_EX_AUTOPLAY_SETTING");
// 20B3179C: using guessed type wchar_t aS_ex_payback_u[25];
// 20B317D0: using guessed type wchar_t aS_ex_die_info[14];
// 20B317EC: using guessed type wchar_t aS_ex_autoplay_[22];
а по этим двум? там функции вроде должны бытьsub_2057AEB0 и sub_20521580
а по этим двум? там функции вроде должны быть
// 20B0D20C: using guessed type wchar_t aNone_3[5];
// 20B0D31C: using guessed type wchar_t aNone_18[7];
// 20B0D32C: using guessed type wchar_t aSSS[10];
// 20B1F790: using guessed type wchar_t[46];
//----- (20521580) --------------------------------------------------------
char __cdecl sub_20521580(int a1, _BYTE *a2)
{
const wchar_t *v2; // esi@4
const wchar_t *v3; // eax@7
signed int i; // esi@10
signed int j; // edi@13
_BYTE *v6; // eax@15
int v7; // eax@16
int v8; // eax@17
_BYTE *v9; // eax@18
int v10; // ecx@19
int v11; // eax@19
int v12; // ecx@19
int v13; // eax@21
int v14; // eax@23
int v15; // eax@23
int v16; // eax@23
int v17; // edx@23
int v19; // [sp+0h] [bp-ECh]@1
__int16 v20; // [sp+Ch] [bp-E0h]@15
__int16 v21; // [sp+3Ch] [bp-B0h]@15
int v22; // [sp+78h] [bp-74h]@13
int v23; // [sp+84h] [bp-68h]@13
unsigned __int64 v24; // [sp+90h] [bp-5Ch]@15
int v25; // [sp+98h] [bp-54h]@14
int v26; // [sp+A0h] [bp-4Ch]@11
char v27; // [sp+A4h] [bp-48h]@10
int v28; // [sp+B8h] [bp-34h]@16
int v29; // [sp+BCh] [bp-30h]@15
int v30; // [sp+C0h] [bp-2Ch]@12
int v31; // [sp+C4h] [bp-28h]@15
int v32; // [sp+C8h] [bp-24h]@12
int v33; // [sp+CCh] [bp-20h]@10
int v34; // [sp+D0h] [bp-1Ch]@13
_BYTE *v35; // [sp+D4h] [bp-18h]@10
_BYTE *v36; // [sp+D8h] [bp-14h]@12
int *v37; // [sp+DCh] [bp-10h]@1
int v38; // [sp+E8h] [bp-4h]@1
v37 = &v19;
v38 = 0;
if ( v151906E8 )
{
if ( vCB58068 && (*(int (**)(void))(*vCB58068 + 208))() )
v2 = (const wchar_t *)(*(int (**)(void))(*vCB58068 + 208))();
else
v2 = L"NONE";
if ( vCB58068 )
v3 = (const wchar_t *)(*(int (**)(void))(*vCB58068 + 2228))();
else
v3 = L"(None)";
v1509F460(v151906E8, (const char *)L"%s[%s] %s", v3, v2, L"ExDieInfo");
}
v150A3540(&v27);
LOBYTE(v38) = 1;
v33 = 0;
v35 = sub_204F5950(*(char **)(a1 + 72), a2, (int)"h", (unsigned int)&v33);
v150A33B0(&v27, (signed __int16)v33, (unsigned __int64)(signed __int16)v33 >> 32);
for ( i = 0; ; ++i )
{
v26 = i;
if ( i >= (signed __int16)v33 )
break;
v30 = 0;
v32 = 0;
v36 = 0;
v35 = sub_204F5950(*(char **)(a1 + 72), v35, (int)&dword_20ADB750, (unsigned int)&v30);
v150A33B0(&v27, v30, (unsigned __int64)v30 >> 32);
v150A33B0(&v27, v32, (unsigned __int64)v32 >> 32);
v150A33B0(&v27, v36, (unsigned __int64)(signed int)v36 >> 32);
}
v34 = 0;
v36 = sub_204F5950(*(char **)(a1 + 72), v35, (int)"h", (unsigned int)&v34);
v150A33B0(&v27, (signed __int16)v34, (unsigned __int64)(signed __int16)v34 >> 32);
sub_201B4A00((int)&v22);
LOBYTE(v38) = 2;
sub_201B4A00((int)&v23);
LOBYTE(v38) = 3;
for ( j = 0; ; ++j )
{
v25 = j;
if ( j >= (signed __int16)v34 )
break;
v35 = 0;
v21 = 0;
v20 = 0;
v31 = 0;
v24 = 0i64;
v29 = 0;
v6 = sub_204F5950(*(char **)(a1 + 72), v36, (int)"h", (unsigned int)&v35);
if ( (_WORD)v35 == 1 )
{
v28 = 0;
v36 = sub_204F5950(*(char **)(a1 + 72), v6, (int)&dword_20ADB74C, (unsigned int)&v28);
v7 = sub_20204190(0, &v28);
if ( v7 )
{
v8 = v1500AFF0(v7);
v15079520(&v21, v8, 24);
}
v9 = v36;
}
else
{
v9 = sub_204F5950(*(char **)(a1 + 72), v6, (int)&dword_20ADB748, 48);
}
v36 = sub_204F5950(*(char **)(a1 + 72), v9, (int)"Sdfh", 48);
v11 = sub_201FB920(v10, &v22);
if ( v11 )
v1500AA30(v11, &v21);
v13 = sub_201FB920(v12, &v23);
if ( v13 )
v1500AA30(v13, &v20);
v150A33B0(&v27, (signed __int16)v35, (unsigned __int64)(signed __int16)v35 >> 32);
v14 = v1500AFF0(v22 + 12 * j);
v150A33B0(&v27, v14, (unsigned __int64)v14 >> 32);
v15 = v1500AFF0(v23 + 12 * j);
v150A33B0(&v27, v15, (unsigned __int64)v15 >> 32);
v150A33B0(&v27, v31, (unsigned __int64)v31 >> 32);
sub_209323FD((__m128d)v24);
v150A33B0(&v27, v16, v17);
v150A33B0(&v27, (signed __int16)v29, (unsigned __int64)(signed __int16)v29 >> 32);
}
(*(void (__stdcall **)(char *))(*(_DWORD *)GL2Console + 5196))(&v27);
LOBYTE(v38) = 2;
sub_201B4AF0((int)&v23);
LOBYTE(v38) = 1;
sub_201B4AF0((int)&v22);
LOBYTE(v38) = 0;
v150A3450(&v27);
return 0;
}
// 20ADB748: using guessed type int dword_20ADB748;
// 20ADB74C: using guessed type int dword_20ADB74C;
// 20ADB750: using guessed type int dword_20ADB750;
// 20B0D20C: using guessed type wchar_t aNone_3[5];
// 20B0D31C: using guessed type wchar_t aNone_18[7];
// 20B0D32C: using guessed type wchar_t aSSS[10];
// 20B1F714: using guessed type wchar_t aExdieinfo[10];
Ну кстати, примерно такая структура и получается в концеструктураКод:H1 for(H1.size) { ddd } H2 for(H2.size) { H3 if(H3 = 1) D else S S D F H }
@Override
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_DIE_INFO.writeId(packet);
packet.writeH(_droppedItems.size());
for (ItemInstance item : _droppedItems)
{
packet.writeD(item.getId());
packet.writeD(item.getEnchantLevel());
packet.writeD((int) item.getCount());
}
packet.writeD(_lastDamageTaken.size());
for (DamageTakenHolder damageHolder : _lastDamageTaken)
{
packet.writeS(damageHolder.getCreature().getName());
packet.writeH(0x00);
packet.writeD(damageHolder.getSkillId());
packet.writeF(damageHolder.getDamage());
packet.writeD(0x00);
}
return true;
public boolean write(PacketWriter packet)
{
OutgoingPackets.EX_DIE_INFO.writeId(packet);
packet.writeH(_droppedItems.size());
for (ItemInstance item : _droppedItems)
{
packet.writeD(item.getId());
packet.writeD(item.getEnchantLevel());
packet.writeD((int) item.getCount());
}
packet.writeH(_lastDamageTaken.size());
for (DamageTakenHolder damageHolder : _lastDamageTaken)
{
packet.writeH(0);
packet.writeS(damageHolder.getCreature().getName());
packet.writeS("");
packet.writeD(damageHolder.getSkillId());
packet.writeF(damageHolder.getDamage());
packet.writeH(0x00);
}
return true;
ох... Вообщем это обычный пакет смерти.Оффтоп:вообщем в моих поисках потребуется какой-то другой пакет...
Где же Вы... Кнопки моей мечты...
Посмотреть вложение 40261
sub_204F5950(*(char **)(a1 + 72), a2, (int)"dQddcd", (unsigned int)&v27);
sub_204F5950(*(char **)(a1 + 72), v2, (int)"ddddd", (unsigned int)&v23);
Это код я у мобиуса взял. У него пакет этот прописан просто.Код:public boolean write(PacketWriter packet) { OutgoingPackets.EX_DIE_INFO.writeId(packet); packet.writeH(_droppedItems.size()); for (ItemInstance item : _droppedItems) { packet.writeD(item.getId()); packet.writeD(item.getEnchantLevel()); packet.writeD((int) item.getCount()); } packet.writeH(_lastDamageTaken.size()); for (DamageTakenHolder damageHolder : _lastDamageTaken) { packet.writeH(0); packet.writeS(damageHolder.getCreature().getName()); packet.writeS(""); packet.writeD(damageHolder.getSkillId()); packet.writeF(damageHolder.getDamage()); packet.writeH(0x00); } return true;
я его изменил же, скомпиль с тем что я написалох... Вообщем это обычный пакет смерти.
Допиленный ( (с) Gaikotsu )
Код:sub_204F5950(*(char **)(a1 + 72), a2, (int)"dQddcd", (unsigned int)&v27); sub_204F5950(*(char **)(a1 + 72), v2, (int)"ddddd", (unsigned int)&v23);
Это код я у мобиуса взял. У него пакет этот прописан просто.
//----- (20312890) --------------------------------------------------------
char *__thiscall sub_20312890(char *this)
{
char *v1; // esi@1
signed int v2; // ebx@1
_WORD *v3; // eax@1
_WORD *v4; // edi@1
int v5; // eax@4
_WORD *v6; // eax@6
int v7; // eax@9
_WORD *v8; // eax@11
int v9; // eax@14
_WORD *v10; // eax@16
int v11; // eax@19
_WORD *v12; // eax@21
int v13; // eax@24
_WORD *v14; // eax@26
int v15; // eax@29
_WORD *v16; // eax@31
int v17; // eax@34
int v19; // [sp+0h] [bp-90h]@1
char v20; // [sp+Ch] [bp-84h]@32
char v21; // [sp+18h] [bp-78h]@27
char v22; // [sp+24h] [bp-6Ch]@22
char v23; // [sp+30h] [bp-60h]@17
char v24; // [sp+3Ch] [bp-54h]@12
char v25; // [sp+48h] [bp-48h]@7
char v26; // [sp+54h] [bp-3Ch]@2
char *v27; // [sp+6Ch] [bp-24h]@1
_WORD *v28; // [sp+74h] [bp-1Ch]@1
_WORD *v29; // [sp+78h] [bp-18h]@2
unsigned int v30; // [sp+7Ch] [bp-14h]@1
int *v31; // [sp+80h] [bp-10h]@1
int v32; // [sp+8Ch] [bp-4h]@1
v31 = &v19;
v1 = this;
v27 = this;
v2 = 0;
v30 = 0;
sub_20262F70(this);
v32 = 0;
*(_DWORD *)v1 = &off_20BCB264;
LOBYTE(v32) = 1;
sub_20101D40(16);
v4 = v3;
v28 = v3;
LOBYTE(v32) = 2;
if ( v3 )
{
v1500AA80(&v26, L"dyepotential_begin");
LOBYTE(v32) = 3;
v2 = 1;
v30 = 1;
v29 = sub_20262B60(v4, (int)&v26, 99);
}
else
{
v29 = 0;
}
v32 = 4;
v5 = v1500A700(v1 + 4, 1, 4);
*(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v5) = v29;
*((_DWORD *)v1 + 10) = v5;
v32 = 1;
if ( v2 & 1 )
{
v2 &= 0xFFFFFFFE;
v30 = v2;
v1500AD30(&v26);
}
sub_20101D40(16);
v28 = v6;
LOBYTE(v32) = 5;
if ( v6 )
{
v1500AA80(&v25, L"dyepotential_id");
LOBYTE(v32) = 6;
v2 |= 2u;
v30 = v2;
v29 = sub_20262B60(v28, (int)&v25, 100);
}
else
{
v29 = 0;
}
v32 = 7;
v7 = v1500A700(v1 + 4, 1, 4);
*(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v7) = v29;
*((_DWORD *)v1 + 11) = v7;
v32 = 1;
if ( v2 & 2 )
{
v2 &= 0xFFFFFFFD;
v30 = v2;
v1500AD30(&v25);
}
sub_20101D40(16);
v28 = v8;
LOBYTE(v32) = 8;
if ( v8 )
{
v1500AA80(&v24, L"dye_slot_id");
LOBYTE(v32) = 9;
v2 |= 4u;
v30 = v2;
v29 = sub_20262B60(v28, (int)&v24, 100);
}
else
{
v29 = 0;
}
v32 = 10;
v9 = v1500A700(v1 + 4, 1, 4);
*(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v9) = v29;
*((_DWORD *)v1 + 12) = v9;
v32 = 1;
if ( v2 & 4 )
{
v2 &= 0xFFFFFFFB;
v30 = v2;
v1500AD30(&v24);
}
sub_20101D40(16);
v28 = v10;
LOBYTE(v32) = 11;
if ( v10 )
{
v1500AA80(&v23, L"effect_name");
LOBYTE(v32) = 12;
v2 |= 8u;
v30 = v2;
v29 = sub_20262B60(v28, (int)&v23, 115);
}
else
{
v29 = 0;
}
v32 = 13;
v11 = v1500A700(v1 + 4, 1, 4);
*(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v11) = v29;
*((_DWORD *)v1 + 13) = v11;
v32 = 1;
if ( v2 & 8 )
{
v2 &= 0xFFFFFFF7;
v30 = v2;
v1500AD30(&v23);
}
sub_20101D40(16);
v28 = v12;
LOBYTE(v32) = 14;
if ( v12 )
{
v1500AA80(&v22, L"skill_id");
LOBYTE(v32) = 15;
v2 |= 0x10u;
v30 = v2;
v29 = sub_20262B60(v28, (int)&v22, 100);
}
else
{
v29 = 0;
}
v32 = 16;
v13 = v1500A700(v1 + 4, 1, 4);
*(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v13) = v29;
*((_DWORD *)v1 + 14) = v13;
v32 = 1;
if ( v2 & 0x10 )
{
v2 &= 0xFFFFFFEF;
v30 = v2;
v1500AD30(&v22);
}
sub_20101D40(16);
v28 = v14;
LOBYTE(v32) = 17;
if ( v14 )
{
v1500AA80(&v21, L"max_skill_level");
LOBYTE(v32) = 18;
v2 |= 0x20u;
v30 = v2;
v29 = sub_20262B60(v28, (int)&v21, 100);
}
else
{
v29 = 0;
}
v32 = 19;
v15 = v1500A700(v1 + 4, 1, 4);
*(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v15) = v29;
*((_DWORD *)v1 + 15) = v15;
v32 = 1;
if ( v2 & 0x20 )
{
v2 &= 0xFFFFFFDF;
v30 = v2;
v1500AD30(&v21);
}
sub_20101D40(16);
v28 = v16;
LOBYTE(v32) = 20;
if ( v16 )
{
v1500AA80(&v20, L"dyepotential_end");
LOBYTE(v32) = 21;
v2 |= 0x40u;
v30 = v2;
v29 = sub_20262B60(v28, (int)&v20, 101);
}
else
{
v29 = 0;
}
v32 = 22;
v17 = v1500A700(v1 + 4, 1, 4);
*(_DWORD *)(*((_DWORD *)v1 + 1) + 4 * v17) = v29;
*((_DWORD *)v1 + 16) = v17;
v32 = 1;
if ( v2 & 0x40 )
{
v30 = v2 & 0xFFFFFFBF;
v1500AD30(&v20);
}
return v1;
}
// 20101D40: using guessed type double __cdecl sub_20101D40(_DWORD);
// 20BA5788: using guessed type wchar_t aSkill_id[9];
// 20BA872C: using guessed type wchar_t aEffect_name[12];
// 20BB60A8: using guessed type wchar_t aMax_skill_leve[16];
// 20BB96EC: using guessed type wchar_t aDyepotential_b[19];
// 20BB9778: using guessed type wchar_t aDye_slot_id[12];
// 20BB9790: using guessed type wchar_t aDyepotential_i[16];
// 20BB97D0: using guessed type wchar_t aDyepotential_e[17];
// 20BCB264: using guessed type int (__stdcall *off_20BCB264)(char);
<for name="dyepotential" size="#data" hidden="false">
<node name="dyepotential_id" reader="UINT" />
<node name="dye_slot_id" reader="UINT" />
<node name="effect_name" reader="UNICODE" />
<node name="skill_id" reader="UINT" />
<node name="max_skill_level" reader="UINT" />
</for>
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?