PyPackedRow* InventoryItem::GetItemRow() const { PyList *keywords = new PyList(); keywords->AddItem(new_tuple(new PyString("stacksize"), new PyToken("util.StackSize"))); keywords->AddItem(new_tuple(new PyString("singleton"), new PyToken("util.Singleton"))); DBRowDescriptor* header = new DBRowDescriptor(keywords); header->AddColumn( "itemID", DBTYPE_I8 ); header->AddColumn( "typeID", DBTYPE_I4 ); header->AddColumn( "ownerID", DBTYPE_I4 ); header->AddColumn( "locationID", DBTYPE_I8 ); header->AddColumn( "flagID", DBTYPE_I2 ); header->AddColumn( "quantity", DBTYPE_I4 ); header->AddColumn( "groupID", DBTYPE_I2 ); header->AddColumn( "categoryID", DBTYPE_I4 ); header->AddColumn( "customInfo", DBTYPE_STR ); //header->AddColumn( "singleton", DBTYPE_BOOL ); //header->AddColumn( "stacksize" , DBTYPE_I4 ); PyPackedRow* row = new PyPackedRow( header ); GetItemRow( row ); return row; }
PyResult OnlineStatusService::Handle_GetInitialState(PyCallArgs &call) { // this is used to query the initial online state of all friends. dummy. DBRowDescriptor *header = new DBRowDescriptor(); header->AddColumn("contactID", DBTYPE_I4); header->AddColumn("online", DBTYPE_I4); CRowSet *rowset = new CRowSet( &header ); return rowset; }
void TestMarshal( const Seperator& cmd ) { const char* cmdName = cmd.arg( 0 ).c_str(); DBRowDescriptor *header = new DBRowDescriptor; // Fill header: header->AddColumn( "historyDate", DBTYPE_FILETIME ); header->AddColumn( "lowPrice", DBTYPE_CY ); header->AddColumn( "highPrice", DBTYPE_CY ); header->AddColumn( "avgPrice", DBTYPE_CY ); header->AddColumn( "volume", DBTYPE_I8 ); header->AddColumn( "orders", DBTYPE_I4 ); CRowSet* rs = new CRowSet( &header ); PyPackedRow* row = rs->NewRow(); row->SetField( "historyDate", new PyLong( Win32TimeNow() ) ); row->SetField( "lowPrice", new PyLong( 18000 ) ); row->SetField( "highPrice", new PyLong( 19000 ) ); row->SetField( "avgPrice", new PyLong( 18400 ) ); row->SetField( "volume", new PyLong( 5463586 ) ); row->SetField( "orders", new PyInt( 254 ) ); sLog.Log( cmdName, "Marshaling..." ); Buffer marshaled; bool res = MarshalDeflate( rs, marshaled ); PyDecRef( rs ); if( !res ) { sLog.Error( cmdName, "Failed to marshal Python object." ); return; } sLog.Log( cmdName, "Unmarshaling..." ); PyRep* rep = InflateUnmarshal( marshaled ); if( NULL == rep ) { sLog.Error( cmdName, "Failed to unmarshal Python object." ); return; } sLog.Success( cmdName, "Final:" ); rep->Dump( stdout, " " ); PyDecRef( rep ); }
PyList* Contract::GetItemsList() const { std::map<uint32, ContractGetItemsRef>::const_iterator cur, end; std::map<uint32, ContractGetItemsRef> item = items(); PyList* res = new PyList; DBRowDescriptor* header = new DBRowDescriptor; header->AddColumn( "contractID", DBTYPE_I4 ); header->AddColumn( "itemID", DBTYPE_I4 ); header->AddColumn( "quantity", DBTYPE_I4 ); header->AddColumn( "itemTypeID", DBTYPE_I4 ); header->AddColumn( "inCrate", DBTYPE_BOOL ); header->AddColumn( "parentID", DBTYPE_I4 ); header->AddColumn( "productivityLevel", DBTYPE_I4 ); header->AddColumn( "materialLevel", DBTYPE_I4 ); header->AddColumn( "copy", DBTYPE_I4 ); header->AddColumn( "licensedProductionRunsRemaining", DBTYPE_I4 ); header->AddColumn( "damage", DBTYPE_R8 ); header->AddColumn( "flagID", DBTYPE_I2 ); cur = item.begin(); end = item.end(); for(; cur != end; *cur++ ) { InventoryItemRef itemInfo = m_itemFactory.GetItem( cur->second->m_itemID ); PyPackedRow* into = new PyPackedRow( header ); GetItemRow( itemInfo, into ); res->AddItem( into ); } std::map<uint32, ContractRequestItemRef>::const_iterator c, e; std::map<uint32, ContractRequestItemRef> requestItem = requestItems(); c = requestItem.begin(); e = requestItem.end(); for(; cur != end; *cur++ ) { PyPackedRow* into = new PyPackedRow( header ); GetRequestItemRow( c->second, into ); res->AddItem( into ); } return res; }
CRowSet* Inventory::List( EVEItemFlags _flag, uint32 forOwner ) const { PyList *keywords = new PyList(); keywords->AddItem(new_tuple(new PyString("stacksize"), new PyToken("util.StackSize"))); keywords->AddItem(new_tuple(new PyString("singleton"), new PyToken("util.Singleton"))); DBRowDescriptor* header = new DBRowDescriptor(keywords); header->AddColumn( "itemID", DBTYPE_I8 ); header->AddColumn( "typeID", DBTYPE_I4 ); header->AddColumn( "ownerID", DBTYPE_I4 ); header->AddColumn( "locationID", DBTYPE_I8 ); header->AddColumn( "flagID", DBTYPE_I2 ); header->AddColumn( "quantity", DBTYPE_I4 ); header->AddColumn( "groupID", DBTYPE_I2 ); header->AddColumn( "categoryID", DBTYPE_I4 ); header->AddColumn( "customInfo", DBTYPE_STR ); //header->AddColumn( "singleton", DBTYPE_BOOL ); //header->AddColumn( "stacksize" , DBTYPE_I4 ); CRowSet* rowset = new CRowSet( &header ); List( rowset, _flag, forOwner ); return rowset; }
CRowSet* Contract::GetBids() const { DBRowDescriptor *bidsHeader = new DBRowDescriptor; bidsHeader->AddColumn( "bidID", DBTYPE_I4 ); bidsHeader->AddColumn( "contractID", DBTYPE_I4 ); bidsHeader->AddColumn( "issuerID", DBTYPE_I4 ); bidsHeader->AddColumn( "quantity", DBTYPE_I4 ); bidsHeader->AddColumn( "issuerCorpID", DBTYPE_I4 ); bidsHeader->AddColumn( "issuerStationID", DBTYPE_I4 ); bidsHeader->AddColumn( "issuerSolarSystemID", DBTYPE_I4 ); bidsHeader->AddColumn( "issuerRegionID", DBTYPE_I4 ); CRowSet *bids_rowset = new CRowSet( &bidsHeader ); return bids_rowset; }
PyPackedRow* InventoryItem::GetItemStatusRow() const { DBRowDescriptor* header = new DBRowDescriptor; header->AddColumn( "instanceID", DBTYPE_I8 ); header->AddColumn( "online", DBTYPE_BOOL ); header->AddColumn( "damage", DBTYPE_R8 ); header->AddColumn( "charge", DBTYPE_R8 ); header->AddColumn( "skillPoints", DBTYPE_I4 ); header->AddColumn( "armorDamage", DBTYPE_R8 ); header->AddColumn( "shieldCharge", DBTYPE_R8 ); header->AddColumn( "incapacitated", DBTYPE_BOOL ); PyPackedRow* row = new PyPackedRow( header ); GetItemStatusRow( row ); return row; }
CRowSet* Inventory::List( EVEItemFlags _flag, uint32 forOwner ) const { DBRowDescriptor* header = new DBRowDescriptor; header->AddColumn( "itemID", DBTYPE_I4 ); header->AddColumn( "typeID", DBTYPE_I2 ); header->AddColumn( "ownerID", DBTYPE_I4 ); header->AddColumn( "locationID", DBTYPE_I4 ); header->AddColumn( "flagID", DBTYPE_I2 ); header->AddColumn( "singleton", DBTYPE_BOOL ); header->AddColumn( "quantity", DBTYPE_I4 ); header->AddColumn( "groupID", DBTYPE_I2 ); header->AddColumn( "categoryID", DBTYPE_UI1 ); header->AddColumn( "customInfo", DBTYPE_STR ); header->AddColumn( "stacksize" , DBTYPE_I4 ); CRowSet* rowset = new CRowSet( &header ); List( rowset, _flag, forOwner ); return rowset; }
PyRep *ObjCacheDB::Generate_invTypes() { DBQueryResult res; const char *q = "SELECT typeID, groupID, typeName, description, graphicID, radius, mass, volume, capacity, portionSize, raceID, basePrice, published, marketGroupID, chanceOfDuplicating, soundID, categoryID, iconID, dataID FROM invTypes"; if(sDatabase.RunQuery(res, q)==false) { _log(SERVICE__ERROR, "Error in query for cached object 'config.BulkData.types': %s", res.error.c_str()); return NULL; } DBRowDescriptor* header = new DBRowDescriptor; header->AddColumn("typeID", DBTYPE_I4); header->AddColumn("groupID", DBTYPE_I2); header->AddColumn("typeName", DBTYPE_WSTR); header->AddColumn("description", DBTYPE_WSTR); header->AddColumn("graphicID", DBTYPE_I4); header->AddColumn("radius", DBTYPE_R8); header->AddColumn("mass", DBTYPE_R8); header->AddColumn("volume", DBTYPE_R8); header->AddColumn("capacity", DBTYPE_R8); header->AddColumn("portionSize", DBTYPE_I4); header->AddColumn("raceID", DBTYPE_UI1); header->AddColumn("basePrice", DBTYPE_CY); header->AddColumn("published", DBTYPE_BOOL); header->AddColumn("marketGroupID", DBTYPE_I2); header->AddColumn("chanceOfDuplicating", DBTYPE_R8); header->AddColumn("soundID", DBTYPE_I4); header->AddColumn("categoryID", DBTYPE_I2); header->AddColumn("iconID", DBTYPE_I4); header->AddColumn("dataID", DBTYPE_I4); return DBResultToCRowset(res, header); }
PyRep *ObjCacheDB::Generate_eveGraphics() { DBQueryResult res; const char *q = "SELECT graphicID, graphicFile, graphicName, description, obsolete, graphicType, collisionFile, paperdollFile, animationTemplate, collidable, explosionID, directoryID, graphicMinX, graphicMinY, graphicMinZ, graphicMaxX, graphicMaxY, graphicMaxZ from graphics"; if(sDatabase.RunQuery(res, q)==false) { _log(SERVICE__ERROR, "Error in query for cached object 'config.BulkData.graphics': %s", res.error.c_str()); return NULL; } DBRowDescriptor* header = new DBRowDescriptor; header->AddColumn("graphicID", DBTYPE_I4); header->AddColumn("graphicFile", DBTYPE_STR); header->AddColumn("graphicName", DBTYPE_STR); header->AddColumn("description", DBTYPE_WSTR); header->AddColumn("obsolete", DBTYPE_BOOL); header->AddColumn("graphicType", DBTYPE_STR); header->AddColumn("collisionFile", DBTYPE_STR); header->AddColumn("paperdollFile", DBTYPE_STR); header->AddColumn("animationTemplate", DBTYPE_I4); header->AddColumn("collidable", DBTYPE_BOOL); header->AddColumn("explosionID", DBTYPE_I4); header->AddColumn("directoryID", DBTYPE_I4); header->AddColumn("graphicMinX", DBTYPE_R8); header->AddColumn("graphicMinY", DBTYPE_R8); header->AddColumn("graphicMinZ", DBTYPE_R8); header->AddColumn("graphicMaxX", DBTYPE_R8); header->AddColumn("graphicMaxY", DBTYPE_R8); header->AddColumn("graphicMaxZ", DBTYPE_R8); return DBResultToCRowset(res, header); }
PyPackedRow* Contract::GetContractRow() { DBRowDescriptor* header = new DBRowDescriptor; header->AddColumn( "contractID", DBTYPE_I4 ); header->AddColumn( "issuerID", DBTYPE_I4 ); header->AddColumn( "issuerCorpID", DBTYPE_I4 ); header->AddColumn( "type", DBTYPE_UI1 ); header->AddColumn( "availability", DBTYPE_I4 ); header->AddColumn( "assigneeID", DBTYPE_I4 ); header->AddColumn( "numDays", DBTYPE_I4 ); header->AddColumn( "startStationID", DBTYPE_I4 ); header->AddColumn( "endStationID", DBTYPE_I4 ); header->AddColumn( "startSolarSystemID", DBTYPE_I4 ); header->AddColumn( "endSolarSystemID", DBTYPE_I4 ); header->AddColumn( "startRegionID", DBTYPE_I4 ); header->AddColumn( "endRegionID", DBTYPE_I4 ); header->AddColumn( "price", DBTYPE_CY ); header->AddColumn( "reward", DBTYPE_CY ); header->AddColumn( "collateral", DBTYPE_CY ); header->AddColumn( "title", DBTYPE_WSTR ); header->AddColumn( "description", DBTYPE_WSTR ); header->AddColumn( "forCorp", DBTYPE_BOOL ); header->AddColumn( "status", DBTYPE_UI1 ); header->AddColumn( "acceptorID", DBTYPE_I4 ); header->AddColumn( "dateIssued", DBTYPE_FILETIME ); header->AddColumn( "dateExpired", DBTYPE_FILETIME ); header->AddColumn( "dateAccepted", DBTYPE_FILETIME ); header->AddColumn( "dateCompleted", DBTYPE_FILETIME ); header->AddColumn( "volume", DBTYPE_R8 ); header->AddColumn( "issuerAllianceID", DBTYPE_I4 ); header->AddColumn( "issuerWalletKey", DBTYPE_I4 ); header->AddColumn( "acceptorWalletKey", DBTYPE_I4 ); header->AddColumn( "crateID", DBTYPE_I4 ); PyPackedRow* row = new PyPackedRow( header ); GetContractRow( row ); return row; }
PyResult ContractMgrService::Handle_GetContractList( PyCallArgs& call ) { sLog.Debug( "ContractMgrService", "Called GetContractListForOwner stub." ); // Call_GetContractListForOwner arg; PyDict* _contract = new PyDict; /*if( !arg.Decode(&call.tuple) ) { codelog(SERVICE__ERROR, "%s: Bad arguments to GetContractListForOwner", call.client->GetName()); return NULL; }*/ // Manual creation of a CRowset, i hate doing this -.-" DBRowDescriptor *header = new DBRowDescriptor(); header->AddColumn( "contractID", DBTYPE_I4); header->AddColumn( "issuerID", DBTYPE_I4); header->AddColumn( "issuerCorpID", DBTYPE_I4 ); header->AddColumn( "type", DBTYPE_UI1 ); header->AddColumn( "availability", DBTYPE_I4 ); header->AddColumn( "assigneeID", DBTYPE_I4 ); header->AddColumn( "numDays", DBTYPE_I4 ); header->AddColumn( "startStationID", DBTYPE_I4 ); header->AddColumn( "endStationID", DBTYPE_I4 ); header->AddColumn( "startSolarSystemID", DBTYPE_I4 ); header->AddColumn( "endSolarSystemID", DBTYPE_I4 ); header->AddColumn( "startRegionID", DBTYPE_I4 ); header->AddColumn( "endRegionID", DBTYPE_I4 ); header->AddColumn( "price", DBTYPE_CY ); header->AddColumn( "reward", DBTYPE_CY ); header->AddColumn( "collateral", DBTYPE_CY ); header->AddColumn( "title", DBTYPE_WSTR ); header->AddColumn( "description", DBTYPE_WSTR ); header->AddColumn( "forCorp", DBTYPE_BOOL ); header->AddColumn( "status", DBTYPE_UI1 ); header->AddColumn( "acceptorID", DBTYPE_I4 ); header->AddColumn( "dateIssued", DBTYPE_FILETIME ); header->AddColumn( "dateExpired", DBTYPE_FILETIME ); header->AddColumn( "dateAccepted", DBTYPE_FILETIME ); header->AddColumn( "dateCompleted", DBTYPE_FILETIME ); header->AddColumn( "volume", DBTYPE_R8 ); header->AddColumn( "issuerAllianceID", DBTYPE_I4 ); header->AddColumn( "issuerWalletKey", DBTYPE_I4 ); CRowSet *rowset = new CRowSet( &header ); PyList* fieldData = new PyList; DBResultRow row; std::map<uint32, ContractRef>::const_iterator cur, end; std::map<uint32, ContractRef> contracts = m_contractManager->GetContractList(); cur = contracts.begin(); end = contracts.end(); util_Rowset res; for(; cur != end; cur++ ) { ContractRef contract = cur->second; PyPackedRow* into = rowset->NewRow(); fieldData->AddItemInt( contract->contractID() ); fieldData->AddItemInt( contract->issuerID() ); fieldData->AddItemInt( contract->issuerCorpID() ); fieldData->AddItemInt( contract->type() ); fieldData->AddItemInt( contract->avail() ); fieldData->AddItemInt( contract->assigneeID() ); fieldData->AddItemInt( contract->expiretime() ); fieldData->AddItemInt( contract->duration() ); fieldData->AddItemInt( contract->startStationID() ); fieldData->AddItemInt( contract->endStationID() ); fieldData->AddItemInt( contract->startSolarSystemID() ); fieldData->AddItemInt( contract->endSolarSystemID() ); fieldData->AddItemInt( contract->startRegionID() ); fieldData->AddItemInt( contract->endRegionID() ); fieldData->AddItemInt( contract->price() ); fieldData->AddItemInt( contract->reward() ); fieldData->AddItemInt( contract->collateral() ); fieldData->AddItemString( contract->title().c_str() ); fieldData->AddItemString( contract->description().c_str() ); fieldData->AddItemInt( contract->forCorp() ); fieldData->AddItemInt( contract->status() ); fieldData->AddItemInt( contract->isAccepted() ); fieldData->AddItemInt( contract->acceptorID() ); fieldData->AddItemInt( contract->dateIssued() ); fieldData->AddItemInt( contract->dateExpired() ); fieldData->AddItemInt( contract->dateAccepted() ); fieldData->AddItemInt( contract->dateCompleted() ); fieldData->AddItemInt( contract->volume() ); into->SetField( contract->contractID(), fieldData ); fieldData = new PyList; res.lines = new PyList; res.header.clear(); fieldData = new PyList; res.header.push_back( "itemTypeID" ); res.header.push_back( "quantity" ); res.header.push_back( "inCrate" ); std::map<uint32, ContractRequestItemRef>::const_iterator rCur, rEnd; for(; rCur != rEnd; rCur++ ) { fieldData->AddItemInt( rCur->second->m_typeID ); fieldData->AddItemInt( rCur->second->m_quantity ); fieldData->AddItemInt( false ); res.lines->AddItem( fieldData ); fieldData = new PyList; } std::map<uint32, ContractGetItemsRef>::const_iterator iCur, iEnd; for(; iCur != iEnd; iCur++ ) { fieldData->AddItemInt( iCur->second->m_itemID ); fieldData->AddItemInt( iCur->second->m_quantity ); fieldData->AddItemInt( true ); res.lines->AddItem( fieldData ); fieldData = new PyList; } } _contract->SetItemString( "contracts", rowset ); _contract->SetItemString( "items", res.Encode() ); _contract->SetItemString( "bids", new PyNone ); return new PyObject( new PyString( "util.KeyVal" ), _contract ); }
PyResult ContractMgrService::Handle_GetContract( PyCallArgs& call ) { Call_SingleIntegerArg arg; PyDict* _contract = new PyDict; if( !arg.Decode( &call.tuple ) ) { codelog(SERVICE__ERROR, "%s: Bad arguments to GetContract in contractMgr", call.client->GetCharacterName() ); return NULL; } // Manual creation of PyPackedRow DBRowDescriptor *header = new DBRowDescriptor(); header->AddColumn( "contractID", DBTYPE_I4 ); header->AddColumn( "issuerID", DBTYPE_I4 ); header->AddColumn( "issuerCorpID", DBTYPE_I4 ); header->AddColumn( "type", DBTYPE_UI1 ); header->AddColumn( "availability", DBTYPE_I4 ); header->AddColumn( "assigneeID", DBTYPE_I4 ); header->AddColumn( "numDays", DBTYPE_I4 ); header->AddColumn( "startStationID", DBTYPE_I4 ); header->AddColumn( "endStationID", DBTYPE_I4 ); header->AddColumn( "startSolarSystemID", DBTYPE_I4 ); header->AddColumn( "endSolarSystemID", DBTYPE_I4 ); header->AddColumn( "startRegionID", DBTYPE_I4 ); header->AddColumn( "endRegionID", DBTYPE_I4 ); header->AddColumn( "price", DBTYPE_CY ); header->AddColumn( "reward", DBTYPE_CY ); header->AddColumn( "collateral", DBTYPE_CY ); header->AddColumn( "title", DBTYPE_WSTR ); header->AddColumn( "description", DBTYPE_WSTR ); header->AddColumn( "forCorp", DBTYPE_BOOL ); header->AddColumn( "status", DBTYPE_UI1 ); header->AddColumn( "acceptorID", DBTYPE_I4 ); header->AddColumn( "dateIssued", DBTYPE_FILETIME ); header->AddColumn( "dateExpired", DBTYPE_FILETIME ); header->AddColumn( "dateAccepted", DBTYPE_FILETIME ); header->AddColumn( "dateCompleted", DBTYPE_FILETIME ); header->AddColumn( "volume", DBTYPE_R8 ); header->AddColumn( "issuerAllianceID", DBTYPE_I4 ); header->AddColumn( "issuerWalletKey", DBTYPE_I4 ); header->AddColumn( "acceptorWalletKey", DBTYPE_I4 ); header->AddColumn( "crateID", DBTYPE_I4 ); ContractRef contract = m_contractManager->GetContract( arg.arg ); uint32 n = 0; PyPackedRow* into = new PyPackedRow( header ); into->SetField( "contractID", new PyInt( contract->contractID() ) ); into->SetField( "issuerID", new PyInt( contract->issuerID() ) ); into->SetField( "issuerCorpID", new PyInt( contract->issuerCorpID() ) ); into->SetField( "type", new PyInt( contract->type() ) ); into->SetField( "availability", new PyInt( contract->avail() ) ); into->SetField( "assigneeID", new PyInt( contract->assigneeID() ) ); into->SetField( "numDays", new PyInt( 0 ) ); into->SetField( "startStationID", new PyInt( contract->startStationID() ) ); into->SetField( "endStationID", new PyInt( contract->endStationID() ) ); into->SetField( "startSolarSystemID", new PyInt( contract->startSolarSystemID() ) ); into->SetField( "endSolarSystemID", new PyInt( contract->endSolarSystemID() ) ); into->SetField( "startRegionID", new PyInt( contract->startRegionID() ) ); into->SetField( "endRegionID", new PyInt( contract->endRegionID() ) ); into->SetField( "price", new PyFloat( contract->price() ) ); into->SetField( "reward", new PyFloat( contract->reward() ) ); into->SetField( "collateral", new PyFloat( contract->collateral() ) ); into->SetField( "title", new PyString( "title" ) ); into->SetField( "description", new PyString( "description" ) ); into->SetField( "forCorp", new PyBool( contract->forCorp() ) ); into->SetField( "status", new PyInt( contract->status() ) ); into->SetField( "acceptorID", new PyInt( contract->acceptorID() ) ); into->SetField( "dateIssued", new PyLong( contract->dateIssued() ) ); into->SetField( "dateExpired", new PyLong( contract->dateExpired() ) ); into->SetField( "dateAccepted", new PyLong( contract->dateAccepted() ) ); into->SetField( "dateCompleted", new PyLong( contract->dateCompleted() ) ); into->SetField( "volume", new PyFloat( contract->volume() ) ); into->SetField( "issuerAllianceID", new PyInt( contract->issuerAllianceID() ) ); into->SetField( "issuerWalletKey", new PyInt( contract->issuerWalletKey() ) ); into->SetField( "acceptorWalletKey", new PyInt( 0 ) ); into->SetField( "crateID", new PyInt( 0 ) ); PyList* itemList = new PyList; DBRowDescriptor *itemHeader = new DBRowDescriptor(); itemHeader->AddColumn( "contractID", DBTYPE_I4 ); itemHeader->AddColumn( "itemID", DBTYPE_I4 ); itemHeader->AddColumn( "quantity", DBTYPE_I4 ); itemHeader->AddColumn( "itemTypeID", DBTYPE_I4 ); itemHeader->AddColumn( "inCrate", DBTYPE_BOOL ); itemHeader->AddColumn( "parentID", DBTYPE_I4 ); itemHeader->AddColumn( "productivityLevel", DBTYPE_I4 ); itemHeader->AddColumn( "materialLevel", DBTYPE_I4 ); itemHeader->AddColumn( "copy", DBTYPE_I4 ); itemHeader->AddColumn( "licensedProductionRunsRemaining", DBTYPE_I4 ); itemHeader->AddColumn( "damage", DBTYPE_R8 ); itemHeader->AddColumn( "flagID", DBTYPE_I2 ); std::map<uint32, ContractGetItemsRef>::const_iterator cur, end; std::map<uint32, ContractGetItemsRef> items = contract->items(); cur = items.begin(); end = items.end(); for(; cur != end; cur++ ) { PyPackedRow* data = new PyPackedRow( itemHeader ); InventoryItemRef item = m_manager->item_factory.GetItem( cur->second->m_itemID ); data->SetField( "contractID", new PyInt( contract->contractID() ) ); data->SetField( "itemID", new PyInt( item->itemID() ) ); data->SetField( "quantity", new PyInt( cur->second->m_quantity ) ); data->SetField( "itemTypeID", new PyInt( item->typeID() ) ); data->SetField( "inCrate", new PyBool( true ) ); if( item->categoryID() == EVEDB::invCategories::Blueprint ) { BlueprintRef bp = m_manager->item_factory.GetBlueprint( item->itemID() ); data->SetField( "parentID", new PyInt( bp->parentBlueprintTypeID() ) ); data->SetField( "productivityLevel", new PyInt( bp->productivityLevel() ) ); data->SetField( "materialLevel", new PyInt( bp->materialLevel() ) ); data->SetField( "copy", new PyInt( bp->copy() ) ); data->SetField( "licensedProductionRunsRemaining", new PyInt( bp->licensedProductionRunsRemaining() ) ); if( bp->HasAttribute( 3 ) ) data->SetField( "damage", new PyFloat( bp->GetAttribute( 3 ).get_float() ) ); else data->SetField( "damage", new PyFloat( 0.0 ) ); data->SetField( "flagID", new PyInt( bp->flag() ) ); } else { data->SetField( "parentID", new PyInt( 0 ) ); data->SetField( "productivityLevel", new PyInt( 0 ) ); data->SetField( "materialLevel", new PyInt( 0 ) ); data->SetField( "copy", new PyInt( 0 ) ); data->SetField( "licensedProductionRunsRemaining", new PyInt( 0 ) ); if( item->HasAttribute( 3 ) ) data->SetField( "damage", new PyFloat( item->GetAttribute( 3 ).get_float() ) ); else data->SetField( "damage", new PyFloat( 0.0 ) ); data->SetField( "flagID", new PyInt( item->flag() ) ); } itemList->AddItem( data ); } std::map<uint32, ContractRequestItemRef>::const_iterator c, e; std::map<uint32, ContractRequestItemRef> requestItems = contract->requestItems(); c = requestItems.begin(); e = requestItems.end(); for(; c != e; c++ ) { PyPackedRow* data = new PyPackedRow( itemHeader ); data->SetField( "contractID", new PyInt( arg.arg ) ); data->SetField( "itemID", new PyInt( 0 ) ); data->SetField( "quantity", new PyInt( c->second->m_quantity ) ); data->SetField( "itemTypeID", new PyInt( c->second->m_typeID ) ); data->SetField( "inCrate", new PyBool( false ) ); data->SetField( "parentID", new PyInt( 0 ) ); data->SetField( "productivityLevel", new PyInt( 0 ) ); data->SetField( "materialLevel", new PyInt( 0 ) ); data->SetField( "copy", new PyInt( 0 ) ); data->SetField( "licensedProductionRunsRemaining", new PyInt( 0 ) ); data->SetField( "damage", new PyFloat( 0.0 ) ); data->SetField( "flagID", new PyInt( 0 ) ); itemList->AddItem( data ); } DBRowDescriptor *bidsHeader = new DBRowDescriptor(); bidsHeader->AddColumn( "bidID", DBTYPE_I4 ); bidsHeader->AddColumn( "contractID", DBTYPE_I4 ); bidsHeader->AddColumn( "issuerID", DBTYPE_I4 ); bidsHeader->AddColumn( "quantity", DBTYPE_I4 ); bidsHeader->AddColumn( "issuerCorpID", DBTYPE_I4 ); bidsHeader->AddColumn( "issuerStationID", DBTYPE_I4 ); bidsHeader->AddColumn( "issuerSolarSystemID", DBTYPE_I4 ); bidsHeader->AddColumn( "issuerRegionID", DBTYPE_I4 ); CRowSet *bids_rowset = new CRowSet( &bidsHeader ); _contract->SetItemString( "items", itemList ); _contract->SetItemString( "bids", bids_rowset ); _contract->SetItemString( "contract", into); PyObject* res = new PyObject( new PyString( "util.KeyVal" ), _contract ); return res; }