Skip to content

Instantly share code, notes, and snippets.

@Konctantin
Created January 11, 2019 09:26
Show Gist options
  • Select an option

  • Save Konctantin/ef2362cb807866c3ab48b8165c0757a6 to your computer and use it in GitHub Desktop.

Select an option

Save Konctantin/ef2362cb807866c3ab48b8165c0757a6 to your computer and use it in GitHub Desktop.
char __fastcall ClientCache::WriteQuestEntry(int *a1, __int64 a2)
{
_DWORD *v2; // rdi
int *v3; // r12
int *v4; // rbx
signed __int64 v5; // rsi
int *v6; // rbx
signed __int64 v7; // rsi
int *v8; // rbx
signed __int64 v9; // rsi
int *v10; // rbx
signed __int64 v11; // rsi
int *v12; // rbx
signed __int64 v13; // rsi
signed __int64 v14; // r14
signed __int64 v15; // rbx
signed __int64 v16; // rsi
unsigned int v17; // er13
char v18; // bl
signed __int64 v19; // rsi
unsigned int v20; // er13
char v21; // bl
signed __int64 v22; // rsi
unsigned int v23; // er13
_DWORD *v24; // rbx
char v25; // al
char v26; // bl
char v27; // cl
char v28; // dl
char v29; // si
signed __int64 v30; // r13
unsigned int v31; // er8
char v32; // bl
signed __int64 v33; // rsi
unsigned int v34; // er13
_DWORD *v35; // rbx
char v36; // al
char v37; // bl
char v38; // cl
char v39; // dl
char v40; // si
signed __int64 v41; // r13
unsigned int v42; // er8
char v43; // bl
signed __int64 v44; // rsi
unsigned int v45; // er13
_DWORD *v46; // rbx
char v47; // al
char v48; // bl
char v49; // cl
char v50; // dl
char v51; // si
signed __int64 v52; // r13
unsigned int v53; // er8
char v54; // bl
char v55; // r15
int v56; // eax
char v57; // dl
__int64 v58; // r15
signed __int64 v59; // rsi
__int64 v60; // rbx
signed __int64 v61; // rdx
signed __int64 v62; // r8
signed __int64 v63; // r8
signed __int64 v64; // r8
signed __int64 v65; // r8
signed __int64 v66; // r8
signed __int64 v67; // r8
signed __int64 v68; // r8
signed __int64 v69; // r8
signed __int64 v70; // r8
__int64 v72; // [rsp+20h] [rbp-48h]
__int64 v73; // [rsp+28h] [rbp-40h]
__int64 v74; // [rsp+30h] [rbp-38h]
__int64 v75; // [rsp+38h] [rbp-30h]
__int64 v76; // [rsp+40h] [rbp-28h]
__int64 v77; // [rsp+48h] [rbp-20h]
_DWORD *v78; // [rsp+50h] [rbp-18h]
__int16 v79; // [rsp+58h] [rbp-10h]
unsigned int v80; // [rsp+B0h] [rbp+48h]
__int64 v81; // [rsp+B8h] [rbp+50h]
__int64 v82; // [rsp+C0h] [rbp+58h]
__int64 v83; // [rsp+C8h] [rbp+60h]
v2 = (_DWORD *)a2;
v3 = a1;
CDataStore::PutInt32(a2, *a1); // QuestId
CDataStore::PutInt32((__int64)v2, v3[1]); // QuestType
CDataStore::PutInt32((__int64)v2, v3[2]); // QuestLevel
CDataStore::PutInt32((__int64)v2, v3[3]); // unk17
CDataStore::PutInt32((__int64)v2, v3[4]); // MaxScalingLevel
CDataStore::PutInt32((__int64)v2, v3[5]); // QuestPackageID
CDataStore::PutInt32((__int64)v2, v3[6]); // QuestMinLevel
CDataStore::PutInt32((__int64)v2, v3[7]); // QuestSortID
CDataStore::PutInt32((__int64)v2, v3[8]); // QuestInfoID
CDataStore::PutInt32((__int64)v2, v3[9]); // SuggestedGroupNum
CDataStore::PutInt32((__int64)v2, v3[10]); // RewardNextQuest
CDataStore::PutInt32((__int64)v2, v3[11]); // RewardXPDifficulty
CDataStore::PutFloat(v2, *((float *)v3 + 12));// RevardXPMultiplier
CDataStore::PutInt32((__int64)v2, v3[13]); // RewardMoney
CDataStore::PutInt32((__int64)v2, v3[14]); // RewardMoneyDifficulty
CDataStore::PutFloat(v2, *((float *)v3 + 15));// RewardMoneyMultiplier
CDataStore::PutInt32((__int64)v2, v3[16]); // RewardBonusMoney
v4 = v3 + 2964;
v5 = 3i64;
do
{
CDataStore::PutInt32((__int64)v2, *v4); // RewardDisplaySpell
++v4;
--v5;
}
while ( v5 );
CDataStore::PutInt32((__int64)v2, v3[17]); // RewardSpell
CDataStore::PutInt32((__int64)v2, v3[18]); // RewardHonor
CDataStore::PutFloat(v2, *((float *)v3 + 19));// RewardKillHonor
CDataStore::PutInt32((__int64)v2, v3[20]); // RewardArtifactXPDifficulty
CDataStore::PutFloat(v2, *((float *)v3 + 21));// RewardArtifactXPMultiplier
CDataStore::PutInt32((__int64)v2, v3[22]); // RewardArtifactCategoryID
CDataStore::PutInt32((__int64)v2, v3[23]); // StartItem
CDataStore::PutInt32((__int64)v2, v3[24]); // Flags
CDataStore::PutInt32((__int64)v2, v3[25]); // QuestFlagsEx
CDataStore::PutInt32((__int64)v2, v3[26]); // unk10
v6 = v3 + 2971;
v7 = 4i64;
do
{
CDataStore::PutInt32((__int64)v2, *(v6 - 4));// RewItemId
CDataStore::PutInt32((__int64)v2, *v6); // RewItemCount
CDataStore::PutInt32((__int64)v2, v6[4]); // ReqSourceId
CDataStore::PutInt32((__int64)v2, v6[8]); // ReqSourceCount
++v6;
--v7;
}
while ( v7 );
v8 = v3 + 2985;
v9 = 6i64;
do
{
CDataStore::PutInt32((__int64)v2, *(v8 - 2));// RewChoiceItemId
CDataStore::PutInt32((__int64)v2, *(v8 - 1));// RewChoiceItemQuantity
CDataStore::PutInt32((__int64)v2, *v8); // RewChoiceItemDisplayID
v8 += 3;
--v9;
}
while ( v9 );
CDataStore::PutInt32((__int64)v2, v3[27]); // POIContinent
CDataStore::PutFloat(v2, *((float *)v3 + 28));// POIx
CDataStore::PutFloat(v2, *((float *)v3 + 29));// POIy
CDataStore::PutInt32((__int64)v2, v3[30]); // POIPriority
CDataStore::PutInt32((__int64)v2, v3[1787]); // RewardTitle
CDataStore::PutInt32((__int64)v2, v3[1788]); // RewardArenaPoints
CDataStore::PutInt32((__int64)v2, v3[1789]); // RewardSkillLineID
CDataStore::PutInt32((__int64)v2, v3[1790]); // RewardNumSkillUps
CDataStore::PutInt32((__int64)v2, v3[1791]); // PortraitGiver
CDataStore::PutInt32((__int64)v2, v3[1792]); // unk11
CDataStore::PutInt32((__int64)v2, v3[1793]); // PortraitTurnIn
v10 = v3 + 3006;
v11 = 5i64;
do
{
CDataStore::PutInt32((__int64)v2, *(v10 - 5));// RewardFactionID
CDataStore::PutInt32((__int64)v2, *v10); // RewardFactionOverride
CDataStore::PutInt32((__int64)v2, v10[5]); // RewardFactionValue
CDataStore::PutInt32((__int64)v2, v10[10]); // RewardFactionCapIn
++v10;
--v11;
}
while ( v11 );
CDataStore::PutInt32((__int64)v2, v3[2946]); // RewardFactionFlags
v12 = v3 + 3025;
v13 = 4i64;
do
{
CDataStore::PutInt32((__int64)v2, *(v12 - 4));// RewardCurrencyID
CDataStore::PutInt32((__int64)v2, *v12); // RewardCurrencyQty
++v12;
--v13;
}
while ( v13 );
CDataStore::PutInt32((__int64)v2, v3[2947]); // AcceptedSoundKitID
CDataStore::PutInt32((__int64)v2, v3[2948]); // CompleteSoundKitID
CDataStore::PutInt32((__int64)v2, v3[2949]); // AreaGroupID
CDataStore::PutInt32((__int64)v2, v3[2950]); // TimeAllowed
CDataStore::PutInt32((__int64)v2, v3[2952]); // objective_count
CDataStore::PutInt64(v2, *((_QWORD *)v3 + 1480));// AllowableRaces
CDataStore::PutInt32((__int64)v2, v3[2962]); // QuestRewardID
CDataStore::PutInt32((__int64)v2, v3[2963]); // Expansion
v78 = v2;
v14 = -1i64;
v81 = (__int64)(v3 + 31);
v79 = 0;
v15 = -1i64;
do
++v15;
while ( *((_BYTE *)v3 + v15 + 124) ); // lenLogTitle (10 bit)
CDataStore::PutInt8(v2, (unsigned int)v15 >> 2);
CDataStore::PutInt2Bit(&v78, v15 & 3);
v16 = -1i64;
v82 = (__int64)(v3 + 159);
do
++v16;
while ( *((_BYTE *)v3 + v16 + 636) ); // lenLogDescription (12 bit)
v17 = (unsigned int)v16 >> 4;
if ( HIBYTE(v79) )
{
v18 = HIBYTE(v79);
CDataStore::PutInt8(v78, ((unsigned __int8)v17 >> SHIBYTE(v79)) | ((_BYTE)v79 << (8 - HIBYTE(v79))));
LOBYTE(v79) = v17 & ((1 << v18) - 1);
}
else
{
CDataStore::PutInt8(v78, v17);
}
CDataStore::PutInt4Bit(&v78, v16 & 0xF);
v19 = -1i64;
v83 = (__int64)(v3 + 909);
do
++v19;
while ( *((_BYTE *)v3 + v19 + 3636) ); // lenQuestDescription (12 bit)
v20 = (unsigned int)v19 >> 4;
if ( HIBYTE(v79) )
{
v21 = HIBYTE(v79);
CDataStore::PutInt8(v78, ((unsigned __int8)v20 >> SHIBYTE(v79)) | ((_BYTE)v79 << (8 - HIBYTE(v79))));
LOBYTE(v79) = v20 & ((1 << v21) - 1);
}
else
{
CDataStore::PutInt8(v78, v20);
}
CDataStore::PutInt4Bit(&v78, v19 & 0xF);
v22 = -1i64;
v72 = (__int64)(v3 + 1659);
do
++v22;
while ( *((_BYTE *)v3 + v22 + 6636) ); // lenAreaDescription (9 bit)
v23 = (unsigned int)v22 >> 1;
if ( HIBYTE(v79) )
{
v26 = HIBYTE(v79);
CDataStore::PutInt8(v78, ((unsigned __int8)v23 >> SHIBYTE(v79)) | ((_BYTE)v79 << (8 - HIBYTE(v79))));
v27 = v26;
v24 = v78;
v25 = v23 & ((1 << v27) - 1);
}
else
{
v24 = v78;
CDataStore::PutInt8(v78, v23);
v25 = v79;
}
v28 = HIBYTE(v79) + 1;
v29 = 2 * v25 | v22 & 1;
HIBYTE(v79) = v28;
LOBYTE(v79) = v29;
if ( v28 == 8 )
{
CDataStore::PutInt8(v24, v29);
v28 = 0;
v79 = 0;
v29 = 0;
}
v30 = -1i64;
v73 = (__int64)(v3 + 1794);
do
++v30;
while ( *((_BYTE *)v3 + v30 + 7176) ); // lenPortraitGiverText (11 bit)
v31 = (unsigned int)v30 >> 3;
v80 = (unsigned int)v30 >> 3;
if ( v28 )
{
v32 = v28;
CDataStore::PutInt8(v78, ((unsigned __int8)v31 >> v28) | (v29 << (8 - v28)));
LOBYTE(v79) = v80 & ((1 << v32) - 1);
}
else
{
CDataStore::PutInt8(v24, v31);
}
CDataStore::PutInt3Bit(&v78, v30 & 7);
v33 = -1i64;
v74 = (__int64)(v3 + 2050);
do
++v33;
while ( *((_BYTE *)v3 + v33 + 8200) ); // lenPortraitGiverName (9 bit)
v34 = (unsigned int)v33 >> 1;
if ( HIBYTE(v79) )
{
v37 = HIBYTE(v79);
CDataStore::PutInt8(v78, ((unsigned __int8)v34 >> SHIBYTE(v79)) | ((_BYTE)v79 << (8 - HIBYTE(v79))));
v38 = v37;
v35 = v78;
v36 = v34 & ((1 << v38) - 1);
}
else
{
v35 = v78;
CDataStore::PutInt8(v78, v34);
v36 = v79;
}
v39 = HIBYTE(v79) + 1;
v40 = 2 * v36 | v33 & 1;
HIBYTE(v79) = v39;
LOBYTE(v79) = v40;
if ( v39 == 8 )
{
CDataStore::PutInt8(v35, v40);
v39 = 0;
v79 = 0;
v40 = 0;
}
v41 = -1i64;
v75 = (__int64)(v3 + 2114);
do
++v41;
while ( *((_BYTE *)v3 + v41 + 8456) ); // lenPortraitTurnInText (11 bit)
v42 = (unsigned int)v41 >> 3;
if ( v39 )
{
v43 = v39;
CDataStore::PutInt8(v78, ((unsigned __int8)v42 >> v39) | (v40 << (8 - v39)));
LOBYTE(v79) = ((unsigned int)v41 >> 3) & ((1 << v43) - 1);
}
else
{
CDataStore::PutInt8(v35, v42);
}
CDataStore::PutInt3Bit(&v78, v41 & 7);
v44 = -1i64;
v76 = (__int64)(v3 + 2370);
do
++v44;
while ( *((_BYTE *)v3 + v44 + 9480) ); // lenPortraitTurnInName (9 bit)
v45 = (unsigned int)v44 >> 1;
if ( HIBYTE(v79) )
{
v48 = HIBYTE(v79);
CDataStore::PutInt8(v78, ((unsigned __int8)v45 >> SHIBYTE(v79)) | ((_BYTE)v79 << (8 - HIBYTE(v79))));
v49 = v48;
v46 = v78;
v47 = v45 & ((1 << v49) - 1);
}
else
{
v46 = v78;
CDataStore::PutInt8(v78, v45);
v47 = v79;
}
v50 = HIBYTE(v79) + 1;
v51 = 2 * v47 | v44 & 1;
HIBYTE(v79) = v50;
LOBYTE(v79) = v51;
if ( v50 == 8 )
{
CDataStore::PutInt8(v46, v51);
v50 = 0;
v79 = 0;
v51 = 0;
}
v52 = -1i64;
v77 = (__int64)(v3 + 2434);
do
++v52;
while ( *((_BYTE *)v3 + v52 + 9736) ); // lenQuestCompletionLog (12 bit)
v53 = (unsigned int)v52 >> 4;
if ( v50 )
{
v54 = v50;
CDataStore::PutInt8(v78, ((unsigned __int8)v53 >> v50) | (v51 << (8 - v50)));
LOBYTE(v79) = ((unsigned int)v52 >> 4) & ((1 << v54) - 1);
}
else
{
CDataStore::PutInt8(v46, v53);
}
CDataStore::PutInt4Bit(&v78, v52 & 0xF);
switch ( HIBYTE(v79) )
{
case 1u:
v55 = 8 - HIBYTE(v79);
v56 = 7 - (8 - HIBYTE(v79));
if ( HIBYTE(v79) != 1 )
goto LABEL_62;
v57 = (_BYTE)v79 << 7;
goto LABEL_75;
case 2u:
v55 = 8 - HIBYTE(v79);
v56 = 6 - (8 - HIBYTE(v79));
if ( HIBYTE(v79) != 2 )
goto LABEL_62;
v57 = (_BYTE)v79 << 6;
goto LABEL_75;
case 3u:
v55 = 8 - HIBYTE(v79);
v56 = 5 - (8 - HIBYTE(v79));
if ( HIBYTE(v79) != 3 )
goto LABEL_62;
v57 = 32 * v79;
goto LABEL_75;
case 4u:
v55 = 8 - HIBYTE(v79);
v56 = 4 - (8 - HIBYTE(v79));
if ( HIBYTE(v79) != 4 )
goto LABEL_62;
v57 = 16 * v79;
goto LABEL_75;
case 5u:
v55 = 8 - HIBYTE(v79);
v56 = 3 - (8 - HIBYTE(v79));
if ( HIBYTE(v79) != 5 )
goto LABEL_62;
v57 = 8 * v79;
goto LABEL_75;
case 6u:
v55 = 8 - HIBYTE(v79);
v56 = 2 - (8 - HIBYTE(v79));
if ( HIBYTE(v79) == 6 )
{
v57 = 4 * v79;
}
else
{
LABEL_62:
if ( v56 < 0 )
goto LABEL_76;
v57 = (_BYTE)v79 << v55;
}
LABEL_75:
CDataStore::PutInt8(v78, v57);
LABEL_76:
v58 = 0i64;
if ( v3[2952] )
{
do
{
v59 = *((_QWORD *)v3 + 1477) + 320 * v58;
CDataStore::PutInt32((__int64)v2, *(_DWORD *)v59);// Id
CDataStore::PutInt8(v2, *(_BYTE *)(v59 + 4));// Type
CDataStore::PutInt8(v2, *(_BYTE *)(v59 + 5));// StorageIndex
CDataStore::PutInt32((__int64)v2, *(_DWORD *)(v59 + 8));// ObjectID
CDataStore::PutInt32((__int64)v2, *(_DWORD *)(v59 + 12));// Amount
CDataStore::PutInt32((__int64)v2, *(_DWORD *)(v59 + 16));// Flags
CDataStore::PutInt32((__int64)v2, *(_DWORD *)(v59 + 20));// flags2
CDataStore::PutFloat(v2, *(float *)(v59 + 24));// Progressbarweight
CDataStore::PutInt32((__int64)v2, *(_DWORD *)(v59 + 288));// VisualEffectsCount
v60 = 0i64;
if ( *(_DWORD *)(v59 + 288) )
{
do
{
CDataStore::PutInt32((__int64)v2, *(_DWORD *)(*(_QWORD *)(v59 + 296) + 4 * v60));// VisualEffect
v60 = (unsigned int)(v60 + 1);
}
while ( (unsigned int)v60 < *(_DWORD *)(v59 + 288) );
}
v61 = -1i64;
do
++v61;
while ( *(_BYTE *)(v59 + v61 + 28) );
CDataStore::PutInt8(v2, v61); // desc_size
v62 = -1i64;
do
++v62;
while ( *(_BYTE *)(v59 + v62 + 28) );
CDataStore::PutIntWowString((__int64)v2, v59 + 28, v62);// Description
v58 = (unsigned int)(v58 + 1);
}
while ( (unsigned int)v58 < v3[2952] );
}
v63 = -1i64;
do
++v63;
while ( *(_BYTE *)(v81 + v63) );
CDataStore::PutIntWowString((__int64)v2, v81, v63);// LogTitle
v64 = -1i64;
do
++v64;
while ( *(_BYTE *)(v82 + v64) );
CDataStore::PutIntWowString((__int64)v2, v82, v64);// LogDescription
v65 = -1i64;
do
++v65;
while ( *(_BYTE *)(v83 + v65) );
CDataStore::PutIntWowString((__int64)v2, v83, v65);// QuestDescription
v66 = -1i64;
do
++v66;
while ( *(_BYTE *)(v72 + v66) );
CDataStore::PutIntWowString((__int64)v2, v72, v66);// AreaDescription
v67 = -1i64;
do
++v67;
while ( *(_BYTE *)(v73 + v67) );
CDataStore::PutIntWowString((__int64)v2, v73, v67);// PortraitGiverText
v68 = -1i64;
do
++v68;
while ( *(_BYTE *)(v74 + v68) );
CDataStore::PutIntWowString((__int64)v2, v74, v68);// PortraitGiverName
v69 = -1i64;
do
++v69;
while ( *(_BYTE *)(v75 + v69) );
CDataStore::PutIntWowString((__int64)v2, v75, v69);// PortraitTurnInText
v70 = -1i64;
do
++v70;
while ( *(_BYTE *)(v76 + v70) );
CDataStore::PutIntWowString((__int64)v2, v76, v70);// PortraitTurnInName
do
++v14;
while ( *(_BYTE *)(v77 + v14) );
CDataStore::PutIntWowString((__int64)v2, v77, v14);// QuestCompletionLog
return 1;
case 7u:
v57 = 2 * v79;
if ( HIBYTE(v79) == 7 )
goto LABEL_75;
goto LABEL_76;
default:
goto LABEL_76;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment