How I do it:
Code:
// relevant offsets
PlayerField_CharacterSlot = 0x4A8, // goes through 0x538
PlayerField_BagStart = 0x540, // 4 bag GUIDs will be listed starting here
PlayerField_BackPackStart = 0x560, // all items go through 0x5D8, these are the GUIDs of items in the backpack
PlayerField_BankStart = 0x5E0, // these items are in the bank (NOT in bags)
PlayerField_BankBags = 0x6F0, // these are the GUIDs of the BAGS in your bank
PlayerField_Keys = 0x758, // player keys
PlayerField_Marks = 0x858, // player marks/emblems (currency)
// Player.m
// items player has in their backpack
- (NSArray*)itemGUIDsInBackpack{
NSMutableArray *itemGUIDs = [NSMutableArray array];
const int numberOfItems = 16; // this could change on a patch day, it's the number of items stored in a player's backpack
uint i;
GUID value = 0;
for ( i = 0; i < numberOfItems; i++ ){
if([_memory loadDataForObject: self atAddress: ([self infoAddress] + PlayerField_BackPackStart + sizeof(GUID)*i) Buffer: (Byte *)&value BufLength: sizeof(value)]) {
[itemGUIDs addObject:[NSNumber numberWithLongLong:value]];
}
}
return itemGUIDs;
}
// the GUIDs of the player's bags
- (NSArray*)itemGUIDsOfBags{
NSMutableArray *bagGUIDs = [NSMutableArray array];
const int numberOfBags = 4;
uint i;
GUID value = 0;
for ( i = 0; i < numberOfBags; i++ ){
if([_memory loadDataForObject: self atAddress: ([self infoAddress] + PlayerField_BagStart + sizeof(GUID)*i) Buffer: (Byte *)&value BufLength: sizeof(value)]) {
[bagGUIDs addObject:[NSNumber numberWithLongLong:value]];
}
}
return bagGUIDs;
}
// InventoryController.m
// return an array of items for an array of guids
- (NSArray*)itemsForGUIDs: (NSArray*) guids{
NSMutableArray *items = [NSMutableArray array];
for ( NSNumber *guid in guids ){
Item *item = [self itemForGUID:[guid longLongValue]];
if ( item ){
[items addObject:item];
}
}
return items;
}
// return ONLY the items the player is wearing (herro % durability calculation)
- (NSArray*)itemsPlayerIsWearing{
NSArray *items = [self itemsForGUIDs:[[playerData player] itemGUIDsPlayerIsWearing]];
return [[items retain] autorelease];
}
// will return an array of type Item
- (NSArray*)itemsInBags{
// will store all of our items
NSMutableArray *items = [NSMutableArray array];
// grab the GUIDs of our bags
NSArray *GUIDsBagsOnPlayer = [[playerData player] itemGUIDsOfBags];
// loop through all of our items to find
for ( Item *item in _itemList ){
NSNumber *itemContainerGUID = [NSNumber numberWithLongLong:[item containerUID]];
if ( [GUIDsBagsOnPlayer containsObject:itemContainerGUID] ){
[items addObject:item];
}
}
// start with the GUIDs of the items in our backpack
NSArray *backpackGUIDs = [[playerData player] itemGUIDsInBackpack];
// loop through our backpack guids
for ( NSNumber *guid in backpackGUIDs ){
Item *item = [self itemForGUID:[guid longLongValue]];
if ( item ){
[items addObject:item];
}
}
return [[items retain] autorelease];
}