Moderator: MacroQuest Developers
Code: Select all
/*0x1a0*/ struct _ITEMSPELLS Clicky;
/*0x1a8*/ struct _ITEMSPELLS Proc;
/*0x1b0*/ struct _ITEMSPELLS Worn;
/*0x1a8*/ struct _ITEMSPELLS Focus;
/*0x1c0*/ struct _ITEMSPELLS Scroll;
- /*0x1c4*/ DWORD Unknown0x1c4;
/*0x1c8*/ DWORD Unknown0x1c8;
Code: Select all
/*0x204*/ DWORD UnStackable; // Careful, packs/containers are marked stackableCode: Select all
case Stack:
if ((pItem->Item->Type != ITEMTYPE_NORMAL) || pItem->Item->UnStackable)
Dest.DWord=1;
else
Dest.DWord=pItem->StackCount;
Dest.Type=pIntType;
return true;
Code: Select all
case Stackable:
Dest.DWord=(pItem->Item->Type!=ITEMTYPE_PACK && !pItem->Item->UnStackable);
Dest.Type=pBoolType;
return true;
Code: Select all
BOOL dataFindItemBankCount(PCHAR szIndex, MQ2TYPEVAR &Ret)
{
if (!szIndex[0])
return false;
DWORD N=1;
PCHAR pName=&szIndex[0];
BOOL bExact=false;
if (*pName=='=')
{
bExact=true;
pName++;
}
CHAR Name[MAX_STRING]={0};
CHAR Temp[MAX_STRING]={0};
strlwr(strcpy(Name,pName));
PCHARINFO pCharInfo=GetCharInfo();
unsigned long Count=0;
for (unsigned long nPack=0 ; nPack < NUM_BANK_SLOTS ; nPack++)
{
PCHARINFO pCharInfo=GetCharInfo();
if (PCONTENTS pPack=pCharInfo->Bank[nPack])
{
if (bExact)
{
if (!stricmp(Name,pPack->Item->Name))
{
if ((pPack->Item->Type != ITEMTYPE_NORMAL) ||
(!pPack->Item->UnStackable))
Count++;
else
Count+=pPack->StackCount;
}
}
else
{
if(strstr(strlwr(strcpy(Temp,pPack->Item->Name)),Name))
{
if ((pPack->Item->Type != ITEMTYPE_NORMAL) ||
(!pPack->Item->UnStackable))
Count++;
else
Count+=pPack->StackCount;
}
}
if (pPack->Item->Type==ITEMTYPE_PACK)
{
for (unsigned long nItem=0 ; nItem < pPack->Item->Slots ; nItem++)
{
if (PCONTENTS pItem=pPack->Contents[nItem])
{
if (bExact)
{
if (!stricmp(Name,pItem->Item->Name))
{
if ((pItem->Item->Type != ITEMTYPE_NORMAL) ||
(!pItem->Item->UnStackable))
Count++;
else
Count+=pItem->StackCount;
}
}
else
{
if(strstr(strlwr(strcpy(Temp,pItem->Item->Name)),Name))
{
if ((pItem->Item->Type != ITEMTYPE_NORMAL) ||
(!pItem->Item->UnStackable))
Count++;
else
Count+=pItem->StackCount;
}
}
}
}
}
}
}
Ret.DWord=Count;
Ret.Type=pIntType;
return true;
}
Code: Select all
BOOL dataFindItemCount(PCHAR szIndex, MQ2TYPEVAR &Ret)
{
if (!szIndex[0])
return false;
DWORD N=1;
PCHAR pName=&szIndex[0];
BOOL bExact=false;
if (*pName=='=')
{
bExact=true;
pName++;
}
CHAR Name[MAX_STRING]={0};
CHAR Temp[MAX_STRING]={0};
strlwr(strcpy(Name,pName));
PCHARINFO pCharInfo=GetCharInfo();
unsigned long Count=0;
for (unsigned long nSlot=0 ; nSlot < 0x1E ; nSlot++)
{
if (PCONTENTS pItem=pCharInfo->InventoryArray[nSlot])
{
if (bExact)
{
if (!stricmp(Name,pItem->Item->Name))
{
if ((pItem->Item->Type != ITEMTYPE_NORMAL) ||
(!pItem->Item->UnStackable))
Count++;
else
Count+=pItem->StackCount;
}
}
else
{
if(strstr(strlwr(strcpy(Temp,pItem->Item->Name)),Name))
{
if ((pItem->Item->Type != ITEMTYPE_NORMAL) ||
(!pItem->Item->UnStackable))
Count++;
else
Count+=pItem->StackCount;
}
}
}
}
for (unsigned long nPack=0 ; nPack < 8 ; nPack++)
{
if (PCONTENTS pPack=pCharInfo->Inventory.Pack[nPack])
{
if (pPack->Item->Type==ITEMTYPE_PACK)
{
for (unsigned long nItem=0 ; nItem < pPack->Item->Slots ; nItem++)
{
if (PCONTENTS pItem=pPack->Contents[nItem])
{
if (bExact)
{
if (!stricmp(Name,pItem->Item->Name))
{
if ((pItem->Item->Type != ITEMTYPE_NORMAL) ||
(!pItem->Item->UnStackable))
Count++;
else
Count+=pItem->StackCount;
}
}
else
{
if(strstr(strlwr(strcpy(Temp,pItem->Item->Name)),Name))
{
if ((pItem->Item->Type != ITEMTYPE_NORMAL) ||
(!pItem->Item->UnStackable))
Count++;
else
Count+=pItem->StackCount;
}
}
}
}
}
}
}
Ret.DWord=Count;
Ret.Type=pIntType;
return true;
}
Code: Select all
if (!pCharInfo->Cursor->Item->UnStackable) {
sprintf(szTmp,"Stack size = %d ",pCharInfo->Cursor->StackCount);
strcat(szMsg,szTmp);
}
Just for clarification, does this replace Stackable in ITEMINFO, or is it just added to the union already there with MaxCharges?Cr4zyb4rd wrote:Ok, in EQData.h, ITEMINFO struct should now have
Code: Select all
/*0x204*/ DWORD UnStackable; // Careful, packs/containers are marked stackable