bool Inventory::LoadContents(ItemFactory &factory) { // check if the contents has already been loaded... if( ContentsLoaded() ) { return true; } sLog.Debug("Inventory", "Recursively loading contents of inventory %u", inventoryID() ); //load the list of items we need std::vector<uint32> items; if( !GetItems( factory, items ) ) { sLog.Error("Inventory", "Failed to get items of %u", inventoryID() ); return false; } //Now get each one from the factory (possibly recursing) ItemData into; uint32 characterID; uint32 corporationID; uint32 locationID; std::vector<uint32>::iterator cur, end; cur = items.begin(); end = items.end(); for(; cur != end; cur++) { // Each "cur" item should be checked to see if they are "owned" by the character connected to this client, // and if not, then do not "get" the entire contents of this for() loop for that item, except in the case that // this item is located in space or belongs to this character's corporation: factory.db().GetItem( *cur, into ); if( factory.GetUsingClient() != NULL ) { characterID = factory.GetUsingClient()->GetCharacterID(); corporationID = factory.GetUsingClient()->GetCorporationID(); locationID = factory.GetUsingClient()->GetLocationID(); } else sLog.Error( "Inventory::LoadContents()", "Failed to resolve pointer to Client object currently using the ItemFactory." ); if( (into.ownerID == characterID) || (characterID == 0) || (into.ownerID == corporationID) || (into.locationID == locationID) ) { // Continue to GetItem() if the client calling this is owned by the character that owns this item // --OR-- // The characterID == 0, which means this is attempting to load the character of this client for the first time. InventoryItemRef i = factory.GetItem( *cur ); if( !i ) { sLog.Error("Inventory::LoadContents()", "Failed to load item %u contained in %u. Skipping.", *cur, inventoryID() ); continue; } AddItem( i ); } } mContentsLoaded = true; return true; }
void Inventory::RemoveItem(uint32 itemID) { std::map<uint32, InventoryItemRef>::iterator res = mContents.find( itemID ); if( res != mContents.end() ) { mContents.erase( res ); sLog.Debug("Inventory", "Updated location %u to no longer contain item %u.", inventoryID(), itemID ); } sLog.Debug("Inventory", "unable to remove %u from %u.", itemID, inventoryID() ); }
QHash<QString, QVariant> Journal::dbValuesImplementation() { QHash <QString,QVariant> keyVals; keyVals[INVENTORYID] = inventoryID(); keyVals[DATE] = date(); keyVals[STATUSID] = statusID(); keyVals[Name] = name(); keyVals[ID] = id(); keyVals[COMMENT] = comment(); return keyVals; }
void Inventory::AddItem(InventoryItemRef item) { std::map<uint32, InventoryItemRef>::iterator res = mContents.find( item->itemID() ); if( res == mContents.end() ) { mContents.insert( std::make_pair( item->itemID(), item ) ); sLog.Debug("Inventory", "Updated location %u to contain item %u with flag %d.", inventoryID(), item->itemID(), (int)item->flag() ); } //else already here sLog.Debug("Inventory", "unable to updated location %u to contain item %u with flag %d, because it already happend.", inventoryID(), item->itemID(), (int)item->flag() ); }