OwnerRef Owner::Spawn(ItemFactory &factory, ItemData &data) { // obtain type of new item const ItemType *t = factory.GetType( data.typeID ); if( t == NULL ) return OwnerRef(); switch( t->groupID() ) { /////////////////////////////////////// // Character: /////////////////////////////////////// case EVEDB::invGroups::Character: { // we're not gonna create character from default attributes ... _log( ITEM__ERROR, "Refusing to create character '%s' from default attributes.", data.name.c_str() ); return OwnerRef(); } } // fallback to default: uint32 ownerID = Owner::_Spawn( factory, data ); if( ownerID == 0 ) return OwnerRef(); return Owner::Load( factory, ownerID ); }
InventoryItemRef InventoryItem::LoadEntity(ItemFactory &factory, uint32 itemID, const ItemData &data) { const ItemType *type = factory.GetType( data.typeID ); InventoryItemRef itemRef = InventoryItemRef( new InventoryItem(factory, itemID, *type, data) ); itemRef->_Load(); return itemRef; }
uint32 Skill::_Spawn(ItemFactory &factory, ItemData &data) { // check it's a skill const ItemType *type = factory.GetType( data.typeID ); if( type == NULL ) return 0; if( type->categoryID() != EVEDB::invCategories::Skill ) { _log( ITEM__ERROR, "Trying to spawn %s as Skill.", type->category().name().c_str() ); return 0; } // spawn item, nothing else return InventoryItem::_Spawn( factory, data ); }
// This Spawn function is meant for in-memory only items created from the // EVEDB::invCategories::Entity category, items meant to never be saved to database // and be thrown away on server shutdown. uint32 InventoryItem::_SpawnEntity(ItemFactory &factory, // InventoryItem stuff: ItemData &data ) { // obtain type of new item // this also checks that the type is valid const ItemType *t = factory.GetType(data.typeID); if(t == NULL) return 0; // fix the name (if empty) if(data.name.empty()) data.name = t->name(); // Get a new Entity ID from ItemFactory's ID Authority: return factory.GetNextEntityID(); }
uint32 InventoryItem::_Spawn(ItemFactory &factory, // InventoryItem stuff: ItemData &data ) { // obtain type of new item // this also checks that the type is valid const ItemType *t = factory.GetType(data.typeID); if(t == NULL) return 0; // fix the name (if empty) if(data.name.empty()) data.name = t->name(); // insert new entry into DB return factory.db().NewItem(data); }
uint32 Structure::_Spawn(ItemFactory &factory, // InventoryItem stuff: ItemData &data ) { // make sure it's a Structure const ItemType *st = factory.GetType(data.typeID); if(st == NULL) return 0; // store item data uint32 structureID = InventoryItem::_Spawn(factory, data); if(structureID == 0) return 0; // nothing additional return structureID; }
uint32 CargoContainer::_Spawn(ItemFactory &factory, // InventoryItem stuff: ItemData &data ) { // make sure it's a cargo container const ItemType *st = factory.GetType(data.typeID); if(st == NULL) return 0; // store item data uint32 containerID = InventoryItem::_Spawn(factory, data); if(containerID == 0) return 0; // nothing additional return containerID; }
uint32 Station::_Spawn(ItemFactory &factory, // InventoryItem stuff: ItemData &data ) { // make sure it's a Station const ItemType *item = factory.GetType(data.typeID); if( !(item->categoryID() == EVEDB::invCategories::Station) ) return 0; // store item data uint32 stationID = InventoryItem::_Spawn(factory, data); if( stationID == 0 ) return 0; // nothing additional return stationID; }
uint32 CelestialObject::_Spawn(ItemFactory &factory, // InventoryItem stuff: ItemData &data ) { // make sure it's a ship const ItemType *item = factory.GetType(data.typeID); if( !(item->categoryID() == EVEDB::invCategories::Celestial) ) return 0; // store item data uint32 celestialID = InventoryItem::_Spawn(factory, data); if( celestialID == 0 ) return 0; // nothing additional return celestialID; }
InventoryItemRef InventoryItem::Spawn(ItemFactory &factory, ItemData &data) { // obtain type of new item const ItemType *t = factory.GetType( data.typeID ); if( t == NULL ) return InventoryItemRef(); // See what to do next: switch( t->categoryID() ) { //! TODO not handled. case EVEDB::invCategories::_System: case EVEDB::invCategories::Station: case EVEDB::invCategories::Material: case EVEDB::invCategories::Accessories: case EVEDB::invCategories::Charge: case EVEDB::invCategories::Trading: case EVEDB::invCategories::Bonus: case EVEDB::invCategories::Commodity: case EVEDB::invCategories::Implant: case EVEDB::invCategories::Reaction: break; /////////////////////////////////////// // Entity: /////////////////////////////////////// case EVEDB::invCategories::Entity: { // Spawn generic item for Entities at this time: uint32 itemID = InventoryItem::_SpawnEntity( factory, data ); if( itemID == 0 ) return InventoryItemRef(); InventoryItemRef itemRef = InventoryItem::LoadEntity( factory, itemID, data ); return itemRef; } /////////////////////////////////////// // Blueprint: /////////////////////////////////////// case EVEDB::invCategories::Blueprint: { BlueprintData bdata; // use default blueprint attributes BlueprintRef blueRef = Blueprint::Spawn( factory, data, bdata ); blueRef.get()->SaveAttributes(); return blueRef; } /////////////////////////////////////// // Celestial: // (used for Cargo Containers, Rings, and Biomasses, Wrecks, Large Collidable Objects, Clouds, // Cosmic Signatures, Mobile Sentry Guns, Global Warp Disruptors, Agents in Space, Cosmic Anomaly, Beacons, Wormholes, // and other celestial static objects such as NPC stations, stars, moons, planets, and stargates) /////////////////////////////////////// case EVEDB::invCategories::Celestial: { if ( (t->groupID() == EVEDB::invGroups::Secure_Cargo_Container) || (t->groupID() == EVEDB::invGroups::Cargo_Container) || (t->groupID() == EVEDB::invGroups::Freight_Container) || (t->groupID() == EVEDB::invGroups::Audit_Log_Secure_Container) || (t->groupID() == EVEDB::invGroups::Spawn_Container) || (t->groupID() == EVEDB::invGroups::Wreck) ) { // Spawn new Cargo Container uint32 itemID = CargoContainer::_Spawn( factory, data ); if( itemID == 0 ) return CargoContainerRef(); CargoContainerRef cargoRef = CargoContainer::Load( factory, itemID ); // THESE SHOULD BE MOVED INTO A CargoContainer::Spawn() function that does not exist yet // Create default dynamic attributes in the AttributeMap: cargoRef.get()->SetAttribute(AttrIsOnline, 1); // Is Online cargoRef.get()->SetAttribute(AttrDamage, 0.0); // Structure Damage //cargoRef.get()->SetAttribute(AttrShieldCharge, cargoRef.get()->GetAttribute(AttrShieldCapacity)); // Shield Charge //cargoRef.get()->SetAttribute(AttrArmorDamage, 0.0); // Armor Damage cargoRef.get()->SetAttribute(AttrMass, cargoRef.get()->type().attributes.mass()); // Mass cargoRef.get()->SetAttribute(AttrRadius, cargoRef.get()->type().attributes.radius()); // Radius cargoRef.get()->SetAttribute(AttrVolume, cargoRef.get()->type().attributes.volume()); // Volume cargoRef.get()->SetAttribute(AttrCapacity, cargoRef.get()->type().attributes.capacity()); // Capacity cargoRef.get()->SaveAttributes(); return cargoRef; //uint32 itemID = InventoryItem::_Spawn( factory, data ); //if( itemID == 0 ) // return InventoryItemRef(); //return InventoryItem::Load( factory, itemID ); } else { // Spawn new Celestial Object uint32 itemID = CelestialObject::_Spawn( factory, data ); if( itemID == 0 ) return CelestialObjectRef(); CelestialObjectRef celestialRef = CelestialObject::Load( factory, itemID ); celestialRef.get()->SaveAttributes(); return celestialRef; } } /////////////////////////////////////// // Ship: /////////////////////////////////////// case EVEDB::invCategories::Ship: { ShipRef shipRef = Ship::Spawn( factory, data ); shipRef.get()->SaveAttributes(); return shipRef; } /////////////////////////////////////// // Skill: /////////////////////////////////////// case EVEDB::invCategories::Skill: { return Skill::Spawn( factory, data ); } /////////////////////////////////////// // Owner: /////////////////////////////////////// case EVEDB::invCategories::Owner: { return Owner::Spawn( factory, data ); } /////////////////////////////////////// // Module: /////////////////////////////////////// case EVEDB::invCategories::Module: { // Spawn generic item: uint32 itemID = InventoryItem::_Spawn( factory, data ); if( itemID == 0 ) return InventoryItemRef(); InventoryItemRef itemRef = InventoryItem::Load( factory, itemID ); // THESE SHOULD BE MOVED INTO A Module::Spawn() function that does not exist yet // Create default dynamic attributes in the AttributeMap: itemRef.get()->SetAttribute(AttrIsOnline, 1); // Is Online itemRef.get()->SetAttribute(AttrDamage, 0.0); // Structure Damage //itemRef.get()->SetAttribute(AttrShieldCharge, itemRef.get()->GetAttribute(AttrShieldCapacity)); // Shield Charge //itemRef.get()->SetAttribute(AttrArmorDamage, 0.0); // Armor Damage itemRef.get()->SetAttribute(AttrMass, itemRef.get()->type().attributes.mass()); // Mass itemRef.get()->SetAttribute(AttrRadius, itemRef.get()->type().attributes.radius()); // Radius itemRef.get()->SetAttribute(AttrVolume, itemRef.get()->type().attributes.volume()); // Volume itemRef.get()->SetAttribute(AttrCapacity, itemRef.get()->type().attributes.capacity()); // Capacity itemRef.get()->SaveAttributes(); return itemRef; } /////////////////////////////////////// // Drone: /////////////////////////////////////// case EVEDB::invCategories::Drone: { // Spawn generic item: uint32 itemID = InventoryItem::_Spawn( factory, data ); if( itemID == 0 ) return InventoryItemRef(); InventoryItemRef itemRef = InventoryItem::Load( factory, itemID ); // THESE SHOULD BE MOVED INTO A Drone::Spawn() function that does not exist yet // Create default dynamic attributes in the AttributeMap: itemRef.get()->SetAttribute(AttrIsOnline, 1); // Is Online itemRef.get()->SetAttribute(AttrDamage, 0.0); // Structure Damage itemRef.get()->SetAttribute(AttrShieldCharge, itemRef.get()->GetAttribute(AttrShieldCapacity)); // Shield Charge itemRef.get()->SetAttribute(AttrArmorDamage, 0.0); // Armor Damage itemRef.get()->SetAttribute(AttrMass, itemRef.get()->type().attributes.mass()); // Mass itemRef.get()->SetAttribute(AttrRadius, itemRef.get()->type().attributes.radius()); // Radius itemRef.get()->SetAttribute(AttrVolume, itemRef.get()->type().attributes.volume()); // Volume itemRef.get()->SetAttribute(AttrCapacity, itemRef.get()->type().attributes.capacity()); // Capacity itemRef.get()->SaveAttributes(); return itemRef; } /////////////////////////////////////// // Deployable: /////////////////////////////////////// case EVEDB::invCategories::Deployable: { // Spawn generic item: uint32 itemID = InventoryItem::_Spawn( factory, data ); if( itemID == 0 ) return InventoryItemRef(); InventoryItemRef itemRef = InventoryItem::Load( factory, itemID ); // THESE SHOULD BE MOVED INTO A Deployable::Spawn() function that does not exist yet // Create default dynamic attributes in the AttributeMap: itemRef.get()->SetAttribute(AttrIsOnline, 1); // Is Online itemRef.get()->SetAttribute(AttrDamage, 0.0); // Structure Damage //itemRef.get()->SetAttribute(AttrShieldCharge, itemRef.get()->GetAttribute(AttrShieldCapacity)); // Shield Charge //itemRef.get()->SetAttribute(AttrArmorDamage, 0.0); // Armor Damage itemRef.get()->SetAttribute(AttrMass, itemRef.get()->type().attributes.mass()); // Mass itemRef.get()->SetAttribute(AttrRadius, itemRef.get()->type().attributes.radius()); // Radius itemRef.get()->SetAttribute(AttrVolume, itemRef.get()->type().attributes.volume()); // Volume itemRef.get()->SetAttribute(AttrCapacity, itemRef.get()->type().attributes.capacity()); // Capacity itemRef.get()->SaveAttributes(); return itemRef; } /////////////////////////////////////// // Asteroid: /////////////////////////////////////// case EVEDB::invCategories::Asteroid: { // Spawn generic item: uint32 itemID = InventoryItem::_Spawn( factory, data ); if( itemID == 0 ) return InventoryItemRef(); InventoryItemRef itemRef = InventoryItem::Load( factory, itemID ); // THESE SHOULD BE MOVED INTO AN Asteroid::Spawn() function that does not exist yet // Create default dynamic attributes in the AttributeMap: itemRef.get()->SetAttribute(AttrRadius, 500.0); // Radius itemRef.get()->SetAttribute(AttrMass, 1000000.0); // Mass itemRef.get()->SetAttribute(AttrVolume, 8000.0); // Volume itemRef.get()->SetAttribute(AttrQuantity, 1000.0); // Quantity itemRef.get()->SaveAttributes(); return itemRef; } /////////////////////////////////////// // Structure: /////////////////////////////////////// case EVEDB::invCategories::Structure: { // Spawn generic item: uint32 itemID = InventoryItem::_Spawn( factory, data ); if( itemID == 0 ) return InventoryItemRef(); InventoryItemRef itemRef = InventoryItem::Load( factory, itemID ); // THESE SHOULD BE MOVED INTO A Structure::Spawn() function that does not exist yet // Create default dynamic attributes in the AttributeMap: itemRef.get()->SetAttribute(AttrIsOnline, 1); // Is Online itemRef.get()->SetAttribute(AttrDamage, 0.0); // Structure Damage itemRef.get()->SetAttribute(AttrShieldCharge, itemRef.get()->GetAttribute(AttrShieldCapacity)); // Shield Charge itemRef.get()->SetAttribute(AttrArmorDamage, 0.0); // Armor Damage itemRef.get()->SetAttribute(AttrMass, itemRef.get()->type().attributes.mass()); // Mass itemRef.get()->SetAttribute(AttrRadius, itemRef.get()->type().attributes.radius()); // Radius itemRef.get()->SetAttribute(AttrVolume, itemRef.get()->type().attributes.volume()); // Volume itemRef.get()->SetAttribute(AttrCapacity, itemRef.get()->type().attributes.capacity()); // Capacity itemRef.get()->SaveAttributes(); return itemRef; } } switch( t->groupID() ) { /////////////////////////////////////// // Station: /////////////////////////////////////// case EVEDB::invGroups::Station: { //_log( ITEM__ERROR, "Refusing to create station '%s'.", data.name.c_str() ); //return InventoryItemRef(); //return Station::Spawn( factory, data ); uint32 itemID = Station::_Spawn( factory, data ); if( itemID == 0 ) return StationRef(); StationRef stationRef = Station::Load( factory, itemID ); // THESE SHOULD BE MOVED INTO A Station::Spawn() function that does not exist yet // Create default dynamic attributes in the AttributeMap: stationRef.get()->SetAttribute(AttrIsOnline, 1); // Is Online stationRef.get()->SetAttribute(AttrDamage, 0.0); // Structure Damage stationRef.get()->SetAttribute(AttrShieldCharge,stationRef.get()->GetAttribute(AttrShieldCapacity)); // Shield Charge stationRef.get()->SetAttribute(AttrArmorDamage, 0.0); // Armor Damage stationRef.get()->SetAttribute(AttrMass, stationRef.get()->type().attributes.mass()); // Mass stationRef.get()->SetAttribute(AttrRadius, stationRef.get()->type().attributes.radius()); // Radius stationRef.get()->SetAttribute(AttrVolume, stationRef.get()->type().attributes.volume()); // Volume stationRef.get()->SetAttribute(AttrCapacity, stationRef.get()->type().attributes.capacity()); // Capacity stationRef.get()->SaveAttributes(); return stationRef; } } // Spawn generic item: uint32 itemID = InventoryItem::_Spawn( factory, data ); if( itemID == 0 ) return InventoryItemRef(); InventoryItemRef itemRef = InventoryItem::Load( factory, itemID ); itemRef.get()->SaveAttributes(); return itemRef; }