- Joined
- Oct 3, 2009
- Messages
- 33
- Reaction score
- 25
From this function you can change view of level/stat requirement, additional/excellent/luck options, etc on item
1.04d gmo
.h
.cpp
Local calls from 0058B77E, 005C7833, 005C7D71, 005C7F1B, 005C80BE, 007E216A
1.04d gmo
.h
Code:
#pragma pack(push, 1)
typedef struct //-> Complete (size: 107)
{
/*+0*/ WORD m_Type;
/*+2*/ int m_Level;
/*+6*/ BYTE Unknown6;
/*+7*/ BYTE Unknown7;
/*+8*/ BYTE Unknown8;
/*+9*/ WORD DamageMin;
/*+11*/ WORD DamageMax;
/*+13*/ BYTE Unknown13;
/*+14*/ WORD Defense;
/*+16*/ WORD MagicDefense;
/*+18*/ BYTE MagicDamage;
/*+19*/ BYTE Unknown19;
/*+20*/ WORD Unknown20;
/*+22*/ BYTE Durability;
/*+23*/ BYTE ExcellentOption;
/*+24*/ BYTE AncientOption;
/*+25*/ WORD ReqStrenght;
/*+27*/ WORD ReqDextirity;
/*+29*/ WORD ReqEnergy;
/*+31*/ WORD ReqVitality;
/*+33*/ WORD ReqCommand;
/*+35*/ WORD ReqLevel;
/*+37*/ BYTE SpecialCount;
/*+38*/ WORD SpecialType[8];
/*+54*/ BYTE SpecialValue[8];
/*+62*/ int UniqueID;
/*+66*/ BYTE Unknown66;
/*+67*/ BYTE PosX;
/*+68*/ BYTE PosY;
/*+69*/ WORD HarmonyType;
/*+71*/ WORD HarmonyValue;
/*+73*/ BYTE Is380Item;
/*+74*/ BYTE SocketOption[5];
/*+79*/ BYTE Unknown79;
/*+80*/ BYTE SocketSeedIndex[5];
/*+85*/ BYTE SocketSphereLevel[5];
/*+90*/ BYTE SocketSet;
BYTE gap01[5];
/*+96*/ BYTE DurabilityState;
/*+97*/ BYTE PeriodItem;
/*+98*/ BYTE ExpiredItem;
/*+99*/ int ExpireDateConvert;
/*+103*/ int Unknown103;
} ObjectItem, * lpItemObj;
#pragma pack(pop)
Code:
#define sub_4F9B50 ((char(*) (int a1, int a2)) 0x4F9B50)
char sub_58B8D0(signed int a1)
{
if ( (a1 >= ITEM(2,8) && a1 <= ITEM(2,15))
|| a1 == ITEM(2,17)
|| a1 == ITEM(2,18)
|| a1 == ITEM(2,21) )
return TRUE;
return FALSE;
}
char sub_5C9370(signed int a1, int a2)
{
BYTE result = FALSE;
int v2 = (a2 + a1) % 512;
if ( a1 >= ITEM(7,0) && a1 <= ITEM(12,0) && v2 >= 62 && v2 <= 72 )
result = TRUE;
return result;
}
char gObjItemConvert(lpItemObj CItem, BYTE a2, BYTE a3, BYTE a4)
{
int *v4; // eax@439
int v6; // [sp+14h] [bp-68h]@156
int v10; // [sp+2Ch] [bp-50h]@115
int v11; // [sp+34h] [bp-48h]@89
int v12; // [sp+3Ch] [bp-40h]@73
int v13; // [sp+44h] [bp-38h]@55
int v14; // [sp+4Ch] [bp-30h]@37
int v16; // [sp+54h] [bp-28h]@1
int v20; // [sp+64h] [bp-18h]@165
int v21; // [sp+68h] [bp-14h]@1
char v22; // [sp+6Fh] [bp-Dh]@1
int v24; // [sp+74h] [bp-8h]@1
int v25; // [sp+78h] [bp-4h]@22
CItem->Level = a2;
v24 = (a2 >> 3) & 0xF;
v16 = a3 & 0x3F;
v21 = a3 & 0x3F;
v22 = 0;
if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6))
|| (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
|| (CItem->m_Type >= ITEM(12,42) && CItem->m_Type <= ITEM(12,43))
|| CItem->m_Type == ITEM(0,19)
|| CItem->m_Type == 2066
|| CItem->m_Type == 2570
|| CItem->m_Type == 1037
|| CItem->m_Type == ITEM(13,30)
|| (CItem->m_Type >= 6274 && CItem->m_Type <= 6278)
|| (CItem->m_Type >= ITEM(12,49) && CItem->m_Type <= ITEM(12,50)) // RF capes
|| CItem->m_Type == 6279
|| CItem->m_Type == 2596 )
v16 = 0;
if ( a4 % 4 == 1 || a4 % 4 == 2 )
{
v16 = 1;
v22 = 1;
}
v25 = *(int*)0x8128AC0 + 84 * CItem->m_Type;
CItem->Unknown8 = *(BYTE *)(v25 + 30);
CItem->Unknown19 = *(BYTE *)(v25 + 45);
CItem->DamageMin = *(BYTE *)(v25 + 40);
CItem->DamageMax = *(BYTE *)(v25 + 41);
CItem->Unknown13 = *(BYTE *)(v25 + 42);
CItem->Defense = *(BYTE *)(v25 + 43);
CItem->MagicDefense = *(BYTE *)(v25 + 44);
CItem->Unknown20 = *(BYTE *)(v25 + 46);
CItem->Unknown18 = *(BYTE *)(v25 + 49);
int v17 = *(WORD *)(v25 + 32) + 30;
int damage = 0;
switch ( CItem->m_Type )
{
case 0x406:
damage = 15;
break;
case 0x806:
damage = 30;
break;
case 0xA07:
damage = 25;
break;
}
//MIN DAMAGE
if ( *(BYTE *)(v25 + 40) > 0 )
{
if ( v16 > 0 )
{
if ( *(WORD *)(v25 + 32) )
{
if ( damage )
CItem->DamageMin += damage;
else
CItem->DamageMin += 25 * *(BYTE *)(v25 + 40) / *(WORD *)(v25 + 32) + 5;
}
}
if ( v22 )
CItem->DamageMin += v17 / 40 + 5;
if ( v24 <= 9 )
v14 = (a2 >> 3) & 0xF;
else
v14 = 9;
CItem->DamageMin += 3 * v14;
switch ( v24 )
{
case 15:
CItem->DamageMin += 9;
goto LABEL_41;
case 14:
LABEL_41:
CItem->DamageMin += 8;
goto LABEL_42;
case 13:
LABEL_42:
CItem->DamageMin += 7;
goto LABEL_43;
case 12:
LABEL_43:
CItem->DamageMin += 6;
goto LABEL_44;
case 11:
LABEL_44:
CItem->DamageMin += 5;
goto LABEL_45;
case 10:
LABEL_45:
CItem->DamageMin += 4;
break;
default:
break;
}
}
// MAX DAMAGE
if ( *(BYTE *)(v25 + 41) > 0 )
{
if ( v16 > 0 )
{
if ( *(WORD *)(v25 + 32) )
{
if ( damage )
CItem->DamageMax += damage;
else
CItem->DamageMax += 25 * *(BYTE *)(v25 + 40) / *(WORD *)(v25 + 32) + 5;
}
}
if ( v22 )
CItem->DamageMax += v17 / 40 + 5;
if ( v24 <= 9 )
v13 = (a2 >> 3) & 0xF;
else
v13 = 9;
CItem->DamageMax += 3 * v13;
switch ( v24 )
{
case 15:
CItem->DamageMax += 9;
goto LABEL_59;
case 14:
LABEL_59:
CItem->DamageMax += 8;
goto LABEL_60;
case 13:
LABEL_60:
CItem->DamageMax += 7;
goto LABEL_61;
case 12:
LABEL_61:
CItem->DamageMax += 6;
goto LABEL_62;
case 11:
LABEL_62:
CItem->DamageMax += 5;
goto LABEL_63;
case 10:
LABEL_63:
CItem->DamageMax += 4;
break;
default:
break;
}
}
// DAMAGE ?
if ( *(BYTE *)(v25 + 49) > 0 )
{
if ( v16 > 0 )
{
if ( *(WORD *)(v25 + 32) )
{
if ( damage )
CItem->Unknown18 += damage;
else
CItem->Unknown18 += 25 * *(BYTE *)(v25 + 49) / *(WORD *)(v25 + 32) + 5;
}
}
if ( v22 )
CItem->Unknown18 += v17 / 60 + 2;
if ( v24 <= 9 )
v12 = (a2 >> 3) & 0xF;
else
v12 = 9;
CItem->Unknown18 += 3 * v12;
switch ( v24 )
{
case 15:
CItem->Unknown18 += 9;
goto LABEL_77;
case 14:
LABEL_77:
CItem->Unknown18 += 8;
goto LABEL_78;
case 13:
LABEL_78:
CItem->Unknown18 += 7;
goto LABEL_79;
case 12:
LABEL_79:
CItem->Unknown18 += 6;
goto LABEL_80;
case 11:
LABEL_80:
CItem->Unknown18 += 5;
goto LABEL_81;
case 10:
LABEL_81:
CItem->Unknown18 += 4;
break;
default:
break;
}
CItem->Unknown18 >>= 1;
if ( !sub_58B8D0(CItem->m_Type) )
CItem->Unknown18 += 2 * v24;
}
//
if ( *(BYTE *)(v25 + 42) > 0 )
{
if ( v16 > 0 )
{
if ( *(WORD *)(v25 + 32) )
CItem->Unknown13 += 25 * *(BYTE *)(v25 + 42) / *(WORD *)(v25 + 32) + 5;
}
if ( v24 <= 9 )
v11 = (a2 >> 3) & 0xF;
else
v11 = 9;
CItem->Unknown13 += 3 * v11;
switch ( v24 )
{
case 15:
CItem->Unknown13 += 9;
goto LABEL_93;
case 14:
LABEL_93:
CItem->Unknown13 += 8;
goto LABEL_94;
case 13:
LABEL_94:
CItem->Unknown13 += 7;
goto LABEL_95;
case 12:
LABEL_95:
CItem->Unknown13 += 6;
goto LABEL_96;
case 11:
LABEL_96:
CItem->Unknown13 += 5;
goto LABEL_97;
case 10:
LABEL_97:
CItem->Unknown13 += 4;
break;
default:
break;
}
}
//DEFENCE
if ( CItem->m_Type == ITEM(13,30) )
{
*(BYTE *)(v25 + 43) = 15;
CItem->Defense = 15;
}
if ( *(BYTE *)(v25 + 43) > 0 )
{
if ( CItem->m_Type >= ITEM(6,0) && CItem->m_Type < ITEM(7,0) ) // Shields
{
CItem->Defense += v24;
if ( v22 )
CItem->Defense += 20 * CItem->Defense / v17 + 2;
}
else
{
if ( v16 > 0 )
{
if ( *(WORD *)(v25 + 32) )
CItem->Defense += 12 * *(BYTE *)(v25 + 43) / *(WORD *)(v25 + 32) + *(WORD *)(v25 + 32) / 5 + 4;
}
if ( v22 )
CItem->Defense += 3 * CItem->Defense / v17 + v17 / 30 + 2;
if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6))
|| CItem->m_Type == ITEM(12,42)
|| CItem->m_Type == ITEM(13,30)
|| CItem->m_Type == ITEM(12,49) ) // Wings 2
{
if ( v24 <= 9 )
v10 = (a2 >> 3) & 0xF;
else
v10 = 9;
CItem->Defense += 2 * v10;
}
else if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
|| CItem->m_Type == ITEM(12,43)
|| CItem->m_Type == ITEM(12,50) ) // Wings 3
{
if ( v24 <= 9 )
v10 = (a2 >> 3) & 0xF;
else
v10 = 9;
CItem->Defense += 4 * v10;
}
else
{
if ( v24 <= 9 )
v10 = (a2 >> 3) & 0xF;
else
v10 = 9;
CItem->Defense += 3 * v10;
}
if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
|| CItem->m_Type == ITEM(12,43)
|| CItem->m_Type == ITEM(12,50) )
{
switch ( v24 )
{
case 15:
CItem->Defense += 10;
goto LABEL_142;
case 14:
LABEL_142:
CItem->Defense += 9;
goto LABEL_143;
case 13:
LABEL_143:
CItem->Defense += 8;
goto LABEL_144;
case 12:
LABEL_144:
CItem->Defense += 7;
goto LABEL_145;
case 11:
LABEL_145:
CItem->Defense += 6;
goto LABEL_146;
case 10:
LABEL_146:
CItem->Defense += 5;
break;
default:
break;
}
}
else
{
switch ( v24 )
{
case 15:
CItem->Defense += 9;
goto LABEL_149;
case 14:
LABEL_149:
CItem->Defense += 8;
goto LABEL_150;
case 13:
LABEL_150:
CItem->Defense += 7;
goto LABEL_151;
case 12:
LABEL_151:
CItem->Defense += 6;
goto LABEL_152;
case 11:
LABEL_152:
CItem->Defense += 5;
goto LABEL_153;
case 10:
LABEL_153:
CItem->Defense += 4;
break;
default:
break;
}
}
}
}
//MAGIC DEFENCE
if ( *(BYTE *)(v25 + 44) > 0 )
{
if ( v24 <= 9 )
v6 = (a2 >> 3) & 0xF;
else
v6 = 9;
CItem->MagicDefense += 3 * v6;
switch ( v24 )
{
case 15:
CItem->MagicDefense += 9;
goto LABEL_160;
case 14:
LABEL_160:
CItem->MagicDefense += 8;
goto LABEL_161;
case 13:
LABEL_161:
CItem->MagicDefense += 7;
goto LABEL_162;
case 12:
LABEL_162:
CItem->MagicDefense += 6;
goto LABEL_163;
case 11:
LABEL_163:
CItem->MagicDefense += 5;
goto LABEL_164;
case 10:
LABEL_164:
CItem->MagicDefense += 4;
break;
default:
break;
}
}
//REQ
v20 = *(WORD *)(v25 + 32);
if ( v16 )
v20 = *(WORD *)(v25 + 32) + 25;
else if ( v22 )
v20 = *(WORD *)(v25 + 32) + 30;
int ReqLevel = 4;
if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6))
|| CItem->m_Type == ITEM(12,42) )
ReqLevel = 5;
if ( *(WORD *)(v25 + 60)
&& ((CItem->m_Type >= 0 && CItem->m_Type < ITEM(12,0))
|| CItem->m_Type == ITEM(13,37)
|| (CItem->m_Type >= ITEM(12,7) && CItem->m_Type <= ITEM(12,40))
|| (CItem->m_Type >= ITEM(12,43) && CItem->m_Type < ITEM(13,0) && CItem->m_Type != ITEM(12,49))) )
{
CItem->ReqLevel = *(WORD *)(v25 + 60);
}
else if ( *(WORD *)(v25 + 60)
&& ((CItem->m_Type >= ITEM(12,0) && CItem->m_Type <= ITEM(12,7))
|| (CItem->m_Type >= ITEM(12,41) && CItem->m_Type <= ITEM(12,42))
|| CItem->m_Type == ITEM(12,49)
|| CItem->m_Type >= ITEM(13,0)) )
CItem->ReqLevel = ReqLevel * v24 + *(WORD *)(v25 + 60);
else
CItem->ReqLevel = 0;
if ( *(WORD *)(v25 + 50) )
CItem->ReqStrenght = 3 * (v20 + 3 * v24) * *(WORD *)(v25 + 50) / 100 + 20;
else
CItem->ReqStrenght = 0;
if ( *(WORD *)(v25 + 52) )
CItem->ReqDextirity = 3 * (v20 + 3 * v24) * *(WORD *)(v25 + 52) / 100 + 20;
else
CItem->ReqDextirity = 0;
if ( *(WORD *)(v25 + 56) )
CItem->ReqVitality = 3 * (v20 + 3 * v24) * *(WORD *)(v25 + 56) / 100 + 20;
else
CItem->ReqVitality = 0;
if ( *(WORD *)(v25 + 54) )
{
if ( (CItem->m_Type < 2581 || CItem->m_Type > 2589) && CItem->m_Type != 2600 )
{
if ( *(WORD *)(v25 + 60) <= 0 || CItem->m_Type < 7680 || CItem->m_Type >= 8192 )
CItem->ReqEnergy = 4 * (v20 + 3 * v24) * *(WORD *)(v25 + 54) / 100 + 20;
else
CItem->ReqEnergy = 4 * *(WORD *)(v25 + 60) * *(WORD *)(v25 + 54) / 100 + 20;
}
else
{
CItem->ReqEnergy = 3 * (v24 + v20) * *(WORD *)(v25 + 54) / 100 + 20;
}
}
else
{
CItem->ReqEnergy = 0;
}
if ( *(WORD *)(v25 + 58) )
CItem->ReqCommand = 3 * (v20 + 3 * v24) * *(WORD *)(v25 + 58) / 100 + 20;
else
CItem->ReqCommand = 0;
if ( CItem->m_Type == 6155 )
{
int ReqEnergy = 0;
switch ( v24 )
{
case 0:
ReqEnergy = 30;
break;
case 1:
ReqEnergy = 60;
break;
case 2:
ReqEnergy = 90;
break;
case 3:
ReqEnergy = 130;
break;
case 4:
ReqEnergy = 170;
break;
case 5:
ReqEnergy = 210;
break;
case 6:
ReqEnergy = 300;
break;
default:
break;
}
CItem->ReqEnergy = ReqEnergy;
}
if ( *(WORD *)(v25 + 58) )
{
if ( CItem->m_Type == 7832 )
CItem->ReqCommand = 15 * *(WORD *)(v25 + 58) + 185;
else
CItem->ReqCommand = *(WORD *)(v25 + 58);
}
if ( CItem->m_Type == 6666 )
{
if ( v24 > 2 )
CItem->ReqLevel = 50;
else
CItem->ReqLevel = 20;
}
if ( (CItem->m_Type >= 3613 && CItem->m_Type <= 3617)
|| (CItem->m_Type >= 4125 && CItem->m_Type <= 4129)
|| (CItem->m_Type >= 4637 && CItem->m_Type <= 4641)
|| (CItem->m_Type >= 5149 && CItem->m_Type <= 5153)
|| (CItem->m_Type >= 5661 && CItem->m_Type <= 5665)
|| CItem->m_Type == 22
|| CItem->m_Type == 23
|| CItem->m_Type == 2572
|| CItem->m_Type == 2069
|| CItem->m_Type == 1038
|| CItem->m_Type == 2579
|| CItem->m_Type == 3627
|| CItem->m_Type == 4139
|| CItem->m_Type == 4651
|| CItem->m_Type == 5163
|| CItem->m_Type == 5675
|| sub_5C9370(CItem->m_Type, 0) )
v16 = 0;
if ( v16 > 0 )
{
if ( CItem->ReqLevel > 0 )
{
if ( CItem->m_Type != ITEM(13,37) )
CItem->ReqLevel += 20;
}
}
CItem->SpecialCount = 0;
// WINGS EXCELLENT
if ( (CItem->m_Type >= ITEM(12,3) && CItem->m_Type <= ITEM(12,6)) // Wings 2
|| CItem->m_Type == ITEM(12,42) )
{
if ( v21 & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 50;
CItem->SpecialType[CItem->SpecialCount++] = 101;
}
if ( (v21 >> 1) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 50;
CItem->SpecialType[CItem->SpecialCount++] = 102;
}
if ( (v21 >> 2) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 3;
CItem->SpecialType[CItem->SpecialCount++] = 103;
}
if ( (v21 >> 3) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 50;
CItem->SpecialType[CItem->SpecialCount++] = 104;
}
if ( (v21 >> 4) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 5;
CItem->SpecialType[CItem->SpecialCount++] = 98;
}
}
else if ( CItem->m_Type == ITEM(13,30) || CItem->m_Type == ITEM(12,49) ) // RF DL Capes 1
{
if ( v21 & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 50;
CItem->SpecialType[CItem->SpecialCount++] = 101;
}
if ( (v21 >> 1) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 50;
CItem->SpecialType[CItem->SpecialCount++] = 102;
}
if ( (v21 >> 2) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 3;
CItem->SpecialType[CItem->SpecialCount++] = 103;
}
if ( (v21 >> 3) & 1 )
{
if ( CItem->m_Type != ITEM(12,49) )
{
CItem->SpecialValue[CItem->SpecialCount] = 5 * v24 + 10;
CItem->SpecialType[CItem->SpecialCount++] = 172;
}
}
}
else if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
|| CItem->m_Type == ITEM(12,43)
|| CItem->m_Type == ITEM(12,50) ) // Wings 3
{
if ( v21 & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 5;
CItem->SpecialType[CItem->SpecialCount++] = 103;
}
if ( (v21 >> 1) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 5;
CItem->SpecialType[CItem->SpecialCount++] = 106;
}
if ( (v21 >> 2) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 5;
CItem->SpecialType[CItem->SpecialCount++] = 107;
}
if ( (v21 >> 3) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 5;
CItem->SpecialType[CItem->SpecialCount++] = 108;
}
}
//??
if ( (a2 >> 7) & 1 )
{
if ( *(WORD *)(v25 + 36) )
CItem->SpecialType[CItem->SpecialCount++] = *(WORD *)(v25 + 36);
}
//LUCK
if ( (a2 >> 2) & 1 )
{
if ( (CItem->m_Type >= 0 && CItem->m_Type < ITEM(12,0))
&& CItem->m_Type != ITEM(4,7)
&& CItem->m_Type != ITEM(4,15) )
CItem->SpecialType[CItem->SpecialCount++] = 85;
if ( (CItem->m_Type >= ITEM(12,0) && CItem->m_Type <= ITEM(12,6))
|| (CItem->m_Type >= ITEM(12,41) && CItem->m_Type <= ITEM(12,42)) )
CItem->SpecialType[CItem->SpecialCount++] = 85;
if ( CItem->m_Type == ITEM(13,30) || CItem->m_Type == ITEM(12,49) )
CItem->SpecialType[CItem->SpecialCount++] = 85;
if ( (CItem->m_Type >= ITEM(12,36) && CItem->m_Type <= ITEM(12,40))
|| CItem->m_Type == ITEM(12,43)
|| CItem->m_Type == ITEM(12,50) )
CItem->SpecialType[CItem->SpecialCount++] = 85;
}
// ADD OPTION
int add = (a2 & 3) + 4 * ((a3 & 0x40) >> 6);
if ( add )
{
if ( CItem->m_Type == ITEM(13,3) )
{
if ( add & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 5;
CItem->SpecialType[CItem->SpecialCount++] = 105;
}
if ( (add >> 1) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 50;
CItem->SpecialType[CItem->SpecialCount++] = 104;
}
if ( (add >> 2) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 5;
CItem->SpecialType[CItem->SpecialCount++] = 98;
}
}
else
{
if ( (CItem->m_Type >= 0 && CItem->m_Type < ITEM(5,0)) // Weapon
&& CItem->m_Type != ITEM(4,7)
&& CItem->m_Type != ITEM(4,15) )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 80;
CItem->ReqStrenght += 5 * add;
}
if ( CItem->m_Type >= ITEM(5,0) && CItem->m_Type < ITEM(6,0) ) // Staff
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
if ( (CItem->m_Type < 2581 || CItem->m_Type > 2589) && CItem->m_Type != 2600 )
CItem->SpecialType[CItem->SpecialCount] = 81;
else
CItem->SpecialType[CItem->SpecialCount] = 82;
++CItem->SpecialCount;
CItem->ReqStrenght += 5 * add;
}
if ( CItem->m_Type >= ITEM(6,0) && CItem->m_Type < ITEM(7,0) ) // Shield
{
CItem->SpecialValue[CItem->SpecialCount] = 5 * add;
CItem->SpecialType[CItem->SpecialCount++] = 83;
CItem->ReqStrenght += 5 * add;
}
if ( CItem->m_Type >= ITEM(7,0) && CItem->m_Type < ITEM(12,0) ) // Sets
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 84;
CItem->ReqStrenght += 5 * add;
}
if ( (CItem->m_Type >= ITEM(13,8) && CItem->m_Type < ITEM(14,0))
&& CItem->m_Type != ITEM(13,30) ) // Rings Pendant
{
if ( CItem->m_Type == ITEM(13,24) )
{
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 204;
}
else if ( CItem->m_Type == ITEM(13,28) )
{
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 205;
}
else
{
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 86;
}
}
switch ( CItem->m_Type ) // Other
{
case ITEM(12,0):
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 86;
break;
case ITEM(12,1):
case ITEM(12,41):
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 81;
break;
case ITEM(12,2):
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 80;
break;
case ITEM(12,3):
if ( (v21 >> 5) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 86;
}
else
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 80;
}
break;
case ITEM(12,4):
if ( (v21 >> 5) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 81;
}
else
{
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 86;
}
break;
case ITEM(12,5):
if ( (v21 >> 5) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 80;
}
else
{
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 86;
}
break;
case ITEM(12,6):
if ( (v21 >> 5) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 80;
}
else
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 81;
}
break;
case ITEM(13,30): // DL Cape 1
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 80;
break;
case ITEM(12,49): // RF Cape 1
if ( (v21 >> 5) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 80;
}
else
{
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 86;
}
break;
case ITEM(12,42):
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
if ( (v21 >> 5) & 1 )
CItem->SpecialType[CItem->SpecialCount] = 81;
else
CItem->SpecialType[CItem->SpecialCount] = 82;
++CItem->SpecialCount;
break;
case ITEM(12,36):
if ( (v21 >> 4) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 80;
}
else if ( (v21 >> 5) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 84;
}
else
{
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 86;
}
break;
case ITEM(12,37):
if ( (v21 >> 4) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 81;
}
else if ( (v21 >> 5) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 84;
}
else
{
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 86;
}
break;
case ITEM(12,38):
if ( (v21 >> 4) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 80;
}
else if ( (v21 >> 5) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 84;
}
else
{
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 86;
}
break;
case ITEM(12,39):
if ( (v21 >> 4) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 80;
}
else if ( (v21 >> 5) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 81;
}
else
{
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 86;
}
break;
case ITEM(12,40): // DL Cape 2
case ITEM(12,50): // RF Cape 2
if ( (v21 >> 4) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 80;
}
else if ( (v21 >> 5) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 84;
}
else
{
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 86;
}
case ITEM(12,43): // SUM Wings 3
if ( (v21 >> 4) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 81;
}
else if ( (v21 >> 5) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 4 * add;
CItem->SpecialType[CItem->SpecialCount++] = 82;
}
else
{
CItem->SpecialValue[CItem->SpecialCount] = add;
CItem->SpecialType[CItem->SpecialCount++] = 86;
}
break;
}
}
}
// ----
if ( CItem->m_Type == 6660 )
{
v4 = sub_4F9930(*(int*)CItem);
sub_4F9B50(*(int*)CItem, *v4);
}
// SHIELDS/SETS/RINGS EXCELLENT
if ( (CItem->m_Type >= ITEM(6,0) && CItem->m_Type < ITEM(12,0))
|| (CItem->m_Type >= ITEM(13,8) && CItem->m_Type <= ITEM(13,9))
|| (CItem->m_Type >= ITEM(13,21) && CItem->m_Type <= ITEM(13,24)) )
{
if ( (a3 >> 5) & 1 )
CItem->SpecialType[CItem->SpecialCount++] = 87;
if ( (a3 >> 4) & 1 )
CItem->SpecialType[CItem->SpecialCount++] = 88;
if ( (a3 >> 3) & 1 )
CItem->SpecialType[CItem->SpecialCount++] = 89;
if ( (a3 >> 2) & 1 )
CItem->SpecialType[CItem->SpecialCount++] = 90;
if ( (a3 >> 1) & 1 )
CItem->SpecialType[CItem->SpecialCount++] = 91;
if ( a3 & 1 )
CItem->SpecialType[CItem->SpecialCount++] = 92;
}
// WEAPON/PENDANTS EXCELLENT
if ( CItem->m_Type >= 0 && CItem->m_Type < ITEM(6,0)
|| CItem->m_Type >= ITEM(13,12) && CItem->m_Type <= ITEM(13,13)
|| CItem->m_Type >= ITEM(13,25) && CItem->m_Type <= ITEM(13,28) )
{
if ( (a3 >> 5) & 1 )
CItem->SpecialType[CItem->SpecialCount++] = 93;
if ( (CItem->m_Type >= ITEM(5,0) && CItem->m_Type < ITEM(6,0))
|| CItem->m_Type == 6668
|| CItem->m_Type == 6681
|| CItem->m_Type == 6683 )
{
if ( (a3 >> 4) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = *(WORD *)(0x8128AC8 + 14) / 20;
CItem->SpecialType[CItem->SpecialCount++] = 96;
}
if ( (a3 >> 3) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 2;
CItem->SpecialType[CItem->SpecialCount++] = 97;
}
}
else
{
if ( (a3 >> 4) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = *(WORD *)(0x8128AC8 + 14) / 20;
CItem->SpecialType[CItem->SpecialCount++] = 94;
}
if ( (a3 >> 3) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 2;
CItem->SpecialType[CItem->SpecialCount++] = 95;
}
}
if ( (a3 >> 2) & 1 )
{
CItem->SpecialValue[CItem->SpecialCount] = 7;
CItem->SpecialType[CItem->SpecialCount++] = 98;
}
if ( (a3 >> 1) & 1 )
CItem->SpecialType[CItem->SpecialCount++] = 99;
if ( a3 & 1 )
CItem->SpecialType[CItem->SpecialCount++] = 100;
}
if ( CItem->m_Type == ITEM(13,20) ) // Wizard ring
{
if ( v24 )
{
if ( v24 == 3 )
{
CItem->SpecialValue[CItem->SpecialCount] = 10;
CItem->SpecialType[CItem->SpecialCount++] = 97;
CItem->SpecialValue[CItem->SpecialCount] = 10;
CItem->SpecialType[CItem->SpecialCount++] = 95;
CItem->SpecialValue[CItem->SpecialCount] = 10;
CItem->SpecialType[CItem->SpecialCount++] = 98;
}
}
else
{
CItem->SpecialValue[CItem->SpecialCount] = 10;
CItem->SpecialType[CItem->SpecialCount++] = 97;
CItem->SpecialValue[CItem->SpecialCount] = 10;
CItem->SpecialType[CItem->SpecialCount++] = 95;
CItem->SpecialValue[CItem->SpecialCount] = 10;
CItem->SpecialType[CItem->SpecialCount++] = 98;
}
}
if ( CItem->m_Type == ITEM(13,107) ) // Lethal Wizard's Ring
{
CItem->SpecialValue[CItem->SpecialCount] = 15;
CItem->SpecialType[CItem->SpecialCount++] = 97;
CItem->SpecialValue[CItem->SpecialCount] = 15;
CItem->SpecialType[CItem->SpecialCount++] = 95;
CItem->SpecialValue[CItem->SpecialCount] = 10;
CItem->SpecialType[CItem->SpecialCount++] = 98;
}
char result = *(BYTE *)(0x8128AC0 + 84 * CItem->m_Type + 34);
CItem->Unknown6 = result;
return result;
}
Local calls from 0058B77E, 005C7833, 005C7D71, 005C7F1B, 005C80BE, 007E216A
Last edited: