ShipRef Ship::Spawn(ItemData &data) { uint32 shipID = Ship::_Spawn( data ); if( shipID == 0 ) return ShipRef(); ShipRef sShipRef = Ship::Load( shipID ); // Create default dynamic attributes in the AttributeMap: sShipRef->setAttribute(AttrIsOnline, 1, true); // Is Online sShipRef->setAttribute(AttrShieldCharge, sShipRef->getAttribute(AttrShieldCapacity), true); // Shield Charge sShipRef->setAttribute(AttrArmorDamage, 0.0, true); // Armor Damage sShipRef->setAttribute(AttrMass, sShipRef->type()->mass, true); // Mass sShipRef->setAttribute(AttrRadius, sShipRef->type()->radius, true); // Radius sShipRef->setAttribute(AttrVolume, sShipRef->type()->volume, true); // Volume sShipRef->setAttribute(AttrCapacity, sShipRef->type()->capacity, true); // Capacity sShipRef->setAttribute(AttrInertia, 1, true); // Inertia sShipRef->setAttribute(AttrCharge, sShipRef->getAttribute(AttrCapacitorCapacity), true); // Set Capacitor Charge to the Capacitor Capacity // Check for existence of some attributes that may or may not have already been loaded and set them // to default values: // Hull Damage if (!(sShipRef->hasAttribute(AttrDamage))) sShipRef->setAttribute(AttrDamage, 0, true); // Theoretical Maximum Targeting Range if (!(sShipRef->hasAttribute(AttrMaximumRangeCap))) sShipRef->setAttribute(AttrMaximumRangeCap, ((double) BUBBLE_RADIUS_METERS), true); // Maximum Armor Damage Resonance if (!(sShipRef->hasAttribute(AttrArmorMaxDamageResonance))) sShipRef->setAttribute(AttrArmorMaxDamageResonance, 1.0f, true); // Maximum Shield Damage Resonance if (!(sShipRef->hasAttribute(AttrShieldMaxDamageResonance))) sShipRef->setAttribute(AttrShieldMaxDamageResonance, 1.0f, true); // Warp Speed Multiplier if (!(sShipRef.get()->hasAttribute(AttrWarpSpeedMultiplier))) sShipRef.get()->setAttribute(AttrWarpSpeedMultiplier, 1.0f, true); // CPU Load of the ship (new ships have zero load with no modules fitted, of course): if (!(sShipRef.get()->hasAttribute(AttrCpuLoad))) sShipRef.get()->setAttribute(AttrCpuLoad, 0, true); // Power Load of the ship (new ships have zero load with no modules fitted, of course): if (!(sShipRef.get()->hasAttribute(AttrPowerLoad))) sShipRef.get()->setAttribute(AttrPowerLoad, 0, true); // Warp Scramble Status of the ship (most ships have zero warp scramble status, but some already have it defined): if (!(sShipRef.get()->hasAttribute(AttrWarpScrambleStatus))) sShipRef.get()->setAttribute(AttrWarpScrambleStatus, 0.0, true); // Shield Resonance // AttrShieldEmDamageResonance if (!(sShipRef.get()->hasAttribute(AttrShieldEmDamageResonance))) sShipRef.get()->setAttribute(AttrShieldEmDamageResonance, 1.0, true); // AttrShieldExplosiveDamageResonance if (!(sShipRef.get()->hasAttribute(AttrShieldExplosiveDamageResonance))) sShipRef.get()->setAttribute(AttrShieldExplosiveDamageResonance, 1.0, true); // AttrShieldKineticDamageResonance if (!(sShipRef.get()->hasAttribute(AttrShieldKineticDamageResonance))) sShipRef.get()->setAttribute(AttrShieldKineticDamageResonance, 1.0, true); // AttrShieldThermalDamageResonance if (!(sShipRef.get()->hasAttribute(AttrShieldThermalDamageResonance))) sShipRef.get()->setAttribute(AttrShieldThermalDamageResonance, 1.0, true); // Armor Resonance // AttrArmorEmDamageResonance if (!(sShipRef.get()->hasAttribute(AttrArmorEmDamageResonance))) sShipRef.get()->setAttribute(AttrArmorEmDamageResonance, 1.0, true); // AttrArmorExplosiveDamageResonance if (!(sShipRef.get()->hasAttribute(AttrArmorExplosiveDamageResonance))) sShipRef.get()->setAttribute(AttrArmorExplosiveDamageResonance, 1.0, true); // AttrArmorKineticDamageResonance if (!(sShipRef.get()->hasAttribute(AttrArmorKineticDamageResonance))) sShipRef.get()->setAttribute(AttrArmorKineticDamageResonance, 1.0, true); // AttrArmorThermalDamageResonance if (!(sShipRef.get()->hasAttribute(AttrArmorThermalDamageResonance))) sShipRef.get()->setAttribute(AttrArmorThermalDamageResonance, 1.0, true); // Hull Resonance // AttrHullEmDamageResonance if (!(sShipRef.get()->hasAttribute(AttrHullEmDamageResonance))) sShipRef.get()->setAttribute(AttrHullEmDamageResonance, 1.0, true); // AttrHullExplosiveDamageResonance if (!(sShipRef.get()->hasAttribute(AttrHullExplosiveDamageResonance))) sShipRef.get()->setAttribute(AttrHullExplosiveDamageResonance, 1.0, true); // AttrHullKineticDamageResonance if (!(sShipRef.get()->hasAttribute(AttrHullKineticDamageResonance))) sShipRef.get()->setAttribute(AttrHullKineticDamageResonance, 1.0, true); // AttrHullThermalDamageResonance if (!(sShipRef.get()->hasAttribute(AttrHullThermalDamageResonance))) sShipRef.get()->setAttribute(AttrHullThermalDamageResonance, 1.0, true); // AttrTurretSlotsLeft if (!(sShipRef.get()->hasAttribute(AttrTurretSlotsLeft))) sShipRef.get()->setAttribute(AttrTurretSlotsLeft, 0, true); // AttrLauncherSlotsLeft if (!(sShipRef.get()->hasAttribute(AttrLauncherSlotsLeft))) sShipRef.get()->setAttribute(AttrLauncherSlotsLeft, 0, true); return sShipRef; }