Posted: Mon Dec 20, 2004 4:01 pm
I've got a working fix (I believe) which adds an offset and a new EQ_Items func, diffs have been sent to Amadeus. I'll include them here as well I suppose... line numbers may be a bit off cuz I had a few extra things in my copy 
EQClasses.cpp
EQClasses.h
eqgame.h
MQ2Commands.cpp
MQ2Data.cpp
MQ2DataTypes.cpp
I haven't tested EVERYTHING, so be aware that it may have some bugs.
Many many thanks to ksmith for the offset for that function
EQClasses.cpp
Code: Select all
@@ -4377,6 +4377,9 @@
#ifdef EQ_Item__IsSpecialNoDrop
FUNCTION_AT_ADDRESS(bool EQ_Item::IsSpecialNoDrop(void),EQ_Item__IsSpecialNoDrop);
#endif
+#ifdef EQ_Item__IsStackable
+FUNCTION_AT_ADDRESS(bool EQ_Item::IsStackable(void),EQ_Item__IsStackable);
+#endif
#ifdef EQ_LoadingS__EQ_LoadingS
FUNCTION_AT_ADDRESS( EQ_LoadingS::EQ_LoadingS(void),EQ_LoadingS__EQ_LoadingS);
#endif
EQClasses.h
Code: Select all
@@ -5535,6 +5535,7 @@
EQLIB_OBJECT int EQ_Item::Platinum(void);
EQLIB_OBJECT int EQ_Item::Silver(void);
EQLIB_OBJECT long EQ_Item::ValueSellMerchant(float,long);
+EQLIB_OBJECT bool EQ_Item::IsStackable(void); // Valerian 12-20-2004
EQLIB_OBJECT char * EQ_Item::GetItemLinkHash(char *); // Lax 11-14-2003
EQLIB_OBJECT int EQ_Item::CanDrop(int); // Lax 04-22-2004
eqgame.h
Code: Select all
@@ -328,6 +330,7 @@
// EQ_Item
#define EQ_Item__GetItemLinkHash 0x49BFB7
#define EQ_Item__CanDrop 0x49C3BE
+#define EQ_Item__IsStackable 0x49C562
// CBankWnd
#define CBankWnd__GetNumBankSlots 0x40B4DD
MQ2Commands.cpp
Code: Select all
@@ -1261,7 +1261,7 @@
sprintf(szTmp,"%dSvC ",pCharInfo->Cursor->Item->SvCold);
strcat(szMsg,szTmp);
}
- if (pCharInfo->Cursor->Item->Stackable==1) {
+ if (((EQ_Item*)pCharInfo->Cursor)->IsStackable()==1) {
sprintf(szTmp,"Stack size = %d ",pCharInfo->Cursor->StackCount);
strcat(szMsg,szTmp);
}
MQ2Data.cpp
Code: Select all
@@ -831,7 +831,7 @@
if (!stricmp(Name,pItem->Item->Name))
{
if ((pItem->Item->Type != ITEMTYPE_NORMAL) ||
- (pItem->Item->Stackable != 1))
+ (((EQ_Item*)pItem)->IsStackable() != 1))
Count++;
else
Count+=pItem->StackCount;
@@ -842,7 +842,7 @@
if(strstr(strlwr(strcpy(Temp,pItem->Item->Name)),Name))
{
if ((pItem->Item->Type != ITEMTYPE_NORMAL) ||
- (pItem->Item->Stackable != 1))
+ (((EQ_Item*)pItem)->IsStackable() != 1))
Count++;
else
Count+=pItem->StackCount;
@@ -866,7 +866,7 @@
if (!stricmp(Name,pItem->Item->Name))
{
if ((pItem->Item->Type != ITEMTYPE_NORMAL) ||
- (pItem->Item->Stackable != 1))
+ (((EQ_Item*)pItem)->IsStackable() != 1))
Count++;
else
Count+=pItem->StackCount;
@@ -877,7 +877,7 @@
if(strstr(strlwr(strcpy(Temp,pItem->Item->Name)),Name))
{
if ((pItem->Item->Type != ITEMTYPE_NORMAL) ||
- (pItem->Item->Stackable != 1))
+ (((EQ_Item*)pItem)->IsStackable() != 1))
Count++;
else
Count+=pItem->StackCount;
@@ -925,7 +925,7 @@
if (!stricmp(Name,pPack->Item->Name))
{
if ((pPack->Item->Type != ITEMTYPE_NORMAL) ||
- (pPack->Item->Stackable != 1))
+ (((EQ_Item*)pPack)->IsStackable() != 1))
Count++;
else
Count+=pPack->StackCount;
@@ -936,7 +936,7 @@
if(strstr(strlwr(strcpy(Temp,pPack->Item->Name)),Name))
{
if ((pPack->Item->Type != ITEMTYPE_NORMAL) ||
- (pPack->Item->Stackable != 1))
+ (((EQ_Item*)pPack)->IsStackable() != 1))
Count++;
else
Count+=pPack->StackCount;
@@ -953,7 +953,7 @@
if (!stricmp(Name,pItem->Item->Name))
{
if ((pItem->Item->Type != ITEMTYPE_NORMAL) ||
- (pItem->Item->Stackable != 1))
+ (((EQ_Item*)pItem)->IsStackable() != 1))
Count++;
else
Count+=pItem->StackCount;
@@ -964,7 +964,7 @@
if(strstr(strlwr(strcpy(Temp,pItem->Item->Name)),Name))
{
if ((pItem->Item->Type != ITEMTYPE_NORMAL) ||
- (pItem->Item->Stackable != 1))
+ (((EQ_Item*)pItem)->IsStackable() != 1))
Count++;
else
Count+=pItem->StackCount;
MQ2DataTypes.cpp
Code: Select all
@@ -2453,7 +2453,7 @@
Dest.Type=pIntType;
return true;
case Stack:
- if ((pItem->Item->Type != ITEMTYPE_NORMAL) || (pItem->Item->Stackable!=1))
+ if ((pItem->Item->Type != ITEMTYPE_NORMAL) || (((EQ_Item*)pItem)->IsStackable()!=1))
Dest.DWord=1;
else
Dest.DWord=pItem->StackCount;
@@ -2541,7 +2541,7 @@
}
return false;
case Stackable:
- Dest.DWord=pItem->Item->Stackable;
+ Dest.DWord=((EQ_Item*)pItem)->IsStackable();
Dest.Type=pBoolType;
return true;
case InvSlot:
Many many thanks to ksmith for the offset for that function