70         std::vector<Inv::SaveData> 
items;
 
   72         std::map<uint32, InventoryItemRef>::iterator itr = 
mContents.begin();
 
   75             inv = itr->second->GetMyInventory();
 
   88                     data.
flag = itr->second->flag();
 
   90                     data.
ownerID = itr->second->ownerID();
 
   91                     data.
position = itr->second->position();
 
   92                     data.
quantity = itr->second->quantity();
 
   93                     data.
singleton = itr->second->isSingleton();
 
   94                     data.
typeID = itr->second->typeID();
 
   96                 items.push_back(data);
 
  121     if (pClient != 
nullptr) {
 
  122         if (pClient->IsCharCreation())
 
  125             if (pClient->IsHangarLoaded(
m_myID))
 
  134         _log(INV__INFO, 
"Inventory::LoadContents() - inventory %u(%p) already loaded.", 
m_myID, 
this);
 
  142     std::vector<uint32> 
items;
 
  143     if (pClient != 
nullptr) {
 
  144         if (pClient->IsValidSession())
 
  145             od.
corpID = pClient->GetCorporationID();
 
  152                 _log(INV__TRACE, 
"Inventory::LoadContents()::IsPlayerCorp() - Loading inventory %u(%p) with owner %u", 
m_myID, 
this , od.
ownerID);
 
  159                 _log(INV__TRACE, 
"Inventory::LoadContents() - Loading office inventory %u(%p) for corp %u in station %s",\
 
  160                             m_myID, 
this , od.
ownerID, (pClient->IsValidSession() ? 
itoa(pClient->GetStationID()) : 
"(invalid)"));
 
  164                 _log(INV__WARNING, 
"Inventory::LoadContents() - inventory of officeID %u using corpID %u. Continuing...", 
m_myID, od.
corpID);
 
  167         if (pClient->IsValidSession()) {
 
  168             od.
ownerID = pClient->GetCharacterID();
 
  170             od.
ownerID = pClient->GetCharID();
 
  174     _log(INV__TRACE, 
"Inventory::LoadContents() - Loading inventory of %s(%u) with owner %u", 
m_self->name(), 
m_myID, od.
ownerID);
 
  176         _log(INV__ERROR, 
"Inventory::LoadContents() - Failed to get inventory items for %s(%u)", 
m_self->name(), 
m_myID);
 
  178             pClient->RemoveStationHangar(
m_myID);
 
  182     for (
auto cur : items) {
 
  186         if (iRef.
get() == 
nullptr) {
 
  187             _log(INV__WARNING, 
"Inventory::LoadContents() - Failed to load item %u contained in %u. Skipping.", cur, 
m_myID);
 
  195     if (
sConfig.debug.UseProfiling)
 
  205     if (iRef.
get() == 
nullptr)
 
  208     std::map<uint32, InventoryItemRef>::iterator itr = 
mContents.find(iRef->itemID());
 
  209     std::pair <std::_Rb_tree_iterator <std::pair <const uint32, InventoryItemRef > >, 
bool > test;
 
  211         test = 
mContents.emplace(iRef->itemID(), iRef);
 
  214         _log(INV__TRACE, 
"Inventory::AddItem() - Updated %s(%u) to contain (%u) %s(%u) in %s.", \
 
  215                 m_self->name(), 
m_myID, iRef->quantity(), iRef->name(), iRef->itemID(), 
sDataMgr.GetFlagName(iRef->flag()));
 
  217         _log(INV__TRACE, 
"Inventory::AddItem() - %s(%u) already contains %s(%u) in %s.", \
 
  234         _log(SOV__DEBUG, 
"Applying system upgrade %s to system %s...", iRef->name(), 
m_self->locationID());
 
  245     if (iRef.
get() == 
nullptr)
 
  248     std::map<uint32, InventoryItemRef>::iterator itr = 
mContents.find(iRef->itemID());
 
  251         _log(INV__TRACE, 
"Inventory::RemoveItem(1) - Updated %s(%u) to no longer contain %s(%u) in %s.", \
 
  254         _log(INV__WARNING,
"Inventory::RemoveItem(1) - %s(%u) contents does not contain %s(%u) in %s.", \
 
  260     for (
auto cur = range.first; cur != range.second; ++cur) {
 
  261         if (cur->second == iRef) {
 
  263             _log(INV__TRACE, 
"Inventory::RemoveItem(2) - %s(%u) removed from %s(%u) flagMap at %s.", \
 
  269     _log(INV__WARNING,
"Inventory::RemoveItem(2) - %s(%u) flagMap does not contain %s(%u) in %s.", \
 
  278     std::map<uint32, InventoryItemRef>::iterator cur = 
mContents.begin();
 
  294     List(rowset, flag, ownerID);
 
  297         rowset->
Dump(INV__LIST, 
"    ");
 
  308             cur.second->GetItemRow(row);
 
  319             cur.second->GetItemRow(row);
 
  323             if (((ownerID == 0)        or (cur.second->ownerID() == ownerID))
 
  324             and ((flag == 
flagNone) or (cur.second->flag() == flag))) {
 
  326                 cur.second->GetItemRow(row);
 
  334         cargoMap.emplace(cur.second->flag(), cur.second);
 
  338     float totalVolume(0.0f);
 
  341             totalVolume += cur.second->quantity() * cur.second->GetAttribute(
AttrVolume).get_float();
 
  346     std::vector<InventoryItemRef> itemVecTmp;
 
  349         itemVecTmp.push_back(cur.second);
 
  373     if (itemVec.size() < 2)
 
  386         for (
int i = 0, i2 = 1; (i < itemVec.size()) && (i2 < itemVec.size()); ++i, ++i2) {
 
  389                 if (itemVec[i]->categoryID() > itemVec[i2]->categoryID()) {
 
  393                     itemVec[i] = itemVec[i2];
 
  401                 itemVec[i] = itemVec[i2];
 
  409     if (
sConfig.debug.IsTestServer)
 
  410         _log(INV__TRACE, 
"Inventory::SortVector() - %u items sorted in %.3fus with %u loops.", itemVec.size(), (
GetTimeUSeconds() - start), count);
 
  416     std::map<uint32, InventoryItemRef>::const_iterator res = 
mContents.find(
id);
 
  428         _log(INV__ERROR, 
"GetInvForOwner called on non-station item %s(%u)", 
m_self->name(), 
m_myID);
 
  432         if (cur.second->ownerID() == ownerID)
 
  433             items.push_back(cur.second);
 
  438         if (cur.second->flag() == flag)
 
  446     for ( 
auto itr = range.first; itr != range.second; ++itr )
 
  447         if (itr->second->typeID() == typeID)
 
  455         invMap.emplace(cur.first, cur.second);
 
  460     for ( 
auto itr = range.first; itr != range.second; ++itr )
 
  461             items.push_back(itr->second);
 
  468     for ( 
auto itr = range.first; itr != range.second; ++itr )
 
  469         items.emplace(itr->second->typeID(), itr->second);
 
  471     if (items.size() > 0)
 
  478     std::vector<InventoryItemRef> 
items;
 
  482     for (
auto cur : items)
 
  483         if (cur->typeID() == typeID )
 
  491     for ( 
auto itr = range.first; itr != range.second; ++itr ) {
 
  507         if (cur.second->flag() >= lowflag && cur.second->flag() <= highflag) {
 
  508             items.push_back(cur.second);
 
  519         if (flags.find(cur.second->flag()) != flags.end()) {
 
  520             items.push_back(cur.second);
 
  530         if (cur.second->typeID() == typeID ) {
 
  531             if (cur.second->quantity() >= qty) {
 
  534                 count += cur.second->quantity();
 
  539     return (count >= qty);
 
  545     std::vector<InventoryItemRef> itemVec;
 
  549     for (
auto cur : itemVec) {
 
  550         if (cur->quantity() >= qty) {
 
  553             count += cur->quantity();
 
  557     return (count >= qty);
 
  563     std::vector<InventoryItemRef> itemVec;
 
  567     for (
auto cur : itemVec)
 
  568         if (cur->typeID() == typeID)
 
  578     std::vector<InventoryItemRef> delVec;
 
  579     std::map<uint16, InventoryItemRef> types;
 
  580     std::map<uint16, InventoryItemRef>::iterator tItr = types.end();
 
  583     for (
auto itr = range.first; itr != range.second; ++itr) {
 
  589         if (iRef->isSingleton())
 
  591         if ((ownerID == 0) or (ownerID == iRef->ownerID())) {
 
  592             tItr = types.find(iRef->typeID());
 
  593             if (tItr == types.end()) {
 
  595                 types.emplace(iRef->typeID(), iRef);
 
  598                 delVec.push_back(iRef);
 
  600                 tItr->second->SetQuantity(tItr->second->quantity() + iRef->quantity(), 
true, 
false);
 
  605     for (
auto cur : delVec)
 
  611     float totalVolume(0.0f);
 
  615                 totalVolume += cur.second->quantity() * cur.second->GetAttribute(
AttrVolume).get_float();
 
  618         for ( 
auto itr = range.first; itr != range.second; ++itr )
 
  619             totalVolume += itr->second->quantity() * itr->second->GetAttribute(
AttrVolume).get_float();
 
  628     float volume(iRef->quantity() * iRef->GetAttribute(
AttrVolume).get_float());
 
  631         _log(INV__CAPY, 
"Inventory::HasAvailableSpace() - Testing %s's %s available capy of %.2f to add %u %s at %.2f (%.3f each)", \
 
  632                 m_self->name(), 
sDataMgr.GetFlagName(flag), capacity, iRef->quantity(), iRef->name(), \
 
  633                 volume, iRef->GetAttribute(
AttrVolume).get_float());
 
  636     if (volume > capacity)
 
  700     _log(INV__WARNING, 
"Inventory::GetCapacity() - Unsupported flag %s(%u) called for %s(%u)", \
 
  715     switch (iRef->typeID()) {
 
  717             if (daysSinceClaim > 2.0f) {
 
  720                 _log(INV__WARNING, 
"Inventory::ValidateIHubUpgrade() - Upgrade %s requires a higher development index.", iRef->name());
 
  721                 throw CustomError(
"%s requires a development index of 2", iRef->name());
 
  726             if (daysSinceClaim > 3.0f) {
 
  729                 _log(INV__WARNING, 
"Inventory::ValidateIHubUpgrade() - Upgrade %s requires a higher development index.", iRef->name());
 
  730                 throw CustomError(
"%s requires a development index of 3", iRef->name());
 
  734             _log(INV__WARNING, 
"Inventory::ValidateIHubUpgrade() - Upgrade %s is not supported currently.", iRef->name());
 
  735             throw CustomError(
"%s is not currently supported.", iRef->name());
 
  737     if (
m_self->GetMyInventory()->ContainsItem(iRef->itemID())) {
 
  738         _log(INV__WARNING, 
"Inventory::ValidateIHubUpgrade() - Upgrade %s is already installed.", iRef->name());
 
  739         throw CustomError(
"%s is already installed.", iRef->name());
 
  761         GVector direction (
m_self->position(), pClient->GetShip()->position());
 
  762         float maxDistance = 2500.0f;
 
  767         if (direction.length() > maxDistance)
 
  775         GVector direction (cRef->position(), pClient->GetShip()->position());
 
  776         float maxDistance(2500.0f);
 
  780         if (direction.length() > maxDistance)
 
  787     float volume = iRef->GetAttribute(
AttrVolume).get_float();
 
  788     float totalVolume = iRef->quantity() * volume;
 
  790     _log(INV__CAPY, 
"Inventory::ValidateAddItem() - Testing %s's %s available capy of %.2f to add %i %s at %.2f (%.3f each)",
 
  791          m_self->name(), 
sDataMgr.GetFlagName(flag), capacity, iRef->quantity(), iRef->name(), totalVolume, volume);
 
  798     if (
m_self->itemID() == iRef->locationID())
 
  799         if ((flag == iRef->flag())
 
  802             capacity += totalVolume;
 
  803             _log(INV__CAPY, 
"Inventory::ValidateAddItem() - flag() %s (%u) == iRef->flag() %s (%u) - test capacity changed to %.2f",
 
  804                     sDataMgr.GetFlagName(flag), flag, 
sDataMgr.GetFlagName(iRef->flag()), iRef->flag(), capacity);
 
  808     if (capacity < volume) { 
 
  809         if (pClient != 
nullptr) {
 
  810             std::map<std::string, PyRep *> 
args;
 
  811             args[
"volume"] = 
new PyFloat(volume);
 
  818                 throw UserError (
"NotEnoughCargoSpaceFor1Unit")
 
  824                 throw UserError (
"NotEnoughSpecialBaySpaceOverload")
 
  834                 throw UserError (
"NotEnoughSpaceOverload")
 
  840                 throw UserError (
"NotEnoughDroneBaySpaceOverload")
 
  846                 throw UserError (
"NoSpaceForThatOverload")
 
  856     if (totalVolume > capacity) {
 
  858             throw UserError (
"NotEnoughSpecialBaySpace")
 
  862             throw UserError (
"NotEnoughDroneBaySpace")
 
  866             throw UserError (
"NotEnoughCargoSpaceOverload")
 
  880                     .
AddAmount (
"volumeAvailable", capacity);
 
void GetInvForOwner(uint32 ownerID, std::vector< InventoryItemRef > &items)
float GetRemainingCapacity(EVEItemFlags flag) const 
#define sConfig
A macro for easier access to the singleton. 
void GetInventoryVec(std::vector< InventoryItemRef > &itemVec)
float GetCapacity(EVEItemFlags flag) const 
bool GetTypesByFlag(EVEItemFlags flag, std::map< uint16, InventoryItemRef > &items)
#define _log(type, fmt,...)
void StackAll(EVEItemFlags flag, uint32 ownerID=0)
InventoryItemRef FindFirstByFlag(EVEItemFlags flag) const 
bool ContainsTypeByFlag(uint16 typeID, EVEItemFlags flag=flagNone) const 
bool HasAvailableSpace(EVEItemFlags flag, InventoryItemRef iRef) const 
void AddItem(InventoryItemRef iRef)
static void SaveItems(std::vector< Inv::SaveData > &data)
std::multimap< uint8, InventoryItemRef > m_contentsByFlag
float GetCorpHangerCapyUsed() const 
Python floating point number. 
void RemoveItem(InventoryItemRef iRef)
UserError & AddFormatValue(const char *name, PyRep *value)
Fluent version of the protected AddKeyword, allows for adding a keyword to the exception. 
bool IsEmptyByFlag(EVEItemFlags flag) const 
Advanced version of UserError that allows to send a full custom message. 
void Dump(FILE *into, const char *pfx) const 
Dumps object to file. 
uint32 GetItemsByFlag(EVEItemFlags flag, std::vector< InventoryItemRef > &items) const 
bool GetItems(OwnerData od, std::vector< uint32 > &into)
#define is_log_enabled(type)
const int64 Win32Time_Day
UserError & AddAmount(const char *name, int quantity)
Shorthand method for adding a quantity value. 
bool GetItemContents(OwnerData &od, std::vector< uint32 > &into)
#define IsPlayerItem(itemID)
Python object "blue.DBRowDescriptor". 
Inventory(InventoryItemRef iRef)
std::map< uint32, InventoryItemRef > mContents
Python object "dbutil.CRowset". 
#define IsSpecialHoldFlag(flag)
void GetCargoList(std::multimap< uint8, InventoryItemRef > &cargoMap)
static void LoadOffices(OwnerData &od, std::vector< uint32 > &into)
#define IsFittingSlot(flag)
#define IsPlayerCorp(itemID)
#define IsCharacterID(itemID)
Python object "ccp_exceptions.UserError". 
static RefPtr StaticCast(const RefPtr< Y > &oth)
Acts as static_cast from one RefPtr to another. 
bool ValidateIHubUpgrade(InventoryItemRef iRef) const 
uint32 GetItemsByFlagSet(std::set< EVEItemFlags > flags, std::vector< InventoryItemRef > &items) const 
void GetInventoryMap(std::map< uint32, InventoryItemRef > &invMap)
RefPtr< InventoryItem > InventoryItemRef
#define IsOfficeID(itemID)
#define IsModuleSlot(flag)
#define IsCargoHoldFlag(flag)
InventoryItemRef GetItemByTypeFlag(uint16 typeID, EVEItemFlags flag=flagNone)
#define IsHangarFlag(flag)
std::vector< InventoryItemRef > SortVector(std::vector< InventoryItemRef > &itemVec)
bool ContainsTypeQtyByFlag(uint16 typeID, EVEItemFlags flag=flagNone, uint32 qty=0) const 
entityID heal the character with the entityID note giving you detailed ship status information gives a list of all dynamic entities and players and their destinyState in this bubble shows some current destiny variables save all items
InventoryItemRef GetByTypeFlag(uint32 typeID, EVEItemFlags flag) const 
CRowSet * List(EVEItemFlags flag, uint32 ownerID=0) const 
uint32 GetItemsByFlagRange(EVEItemFlags low_flag, EVEItemFlags high_flag, std::vector< InventoryItemRef > &items) const 
bool ValidateAddItem(EVEItemFlags flag, InventoryItemRef iRef) const 
bool ContainsTypeQty(uint16 typeID, uint32 qty=0) const 
InventoryItemRef GetByID(uint32 id) const 
const char * itoa(int64 num)
Convers num to string. 
float GetStoredVolume(EVEItemFlags flag, bool combined=true) const 
void AddStationHangar(uint32 stationID)
bool GetSingleItemByFlag(EVEItemFlags flag, InventoryItemRef &iRef) const 
UserError & AddLocationName(const char *name, uint32 locationID)
Shorthand method for adding a location's name. 
Reference-counting-based smart pointer.