//------------------------------------------------------------------------------ void Mission4::CreateUniverse (void) { LoadUniverse ("training_3", 486, 1030); // an advanced stealth fighter // stuff for setup IshipIGC* pShip = trekClient.GetShip(); // set a global attribute to increase the overall energy of the ship IsideIGC* pSide = pShip->GetSide (); GlobalAttributeSet gas = pSide->GetGlobalAttributeSet (); gas.SetAttribute (c_gaMaxEnergy, 10.0f); pSide->SetGlobalAttributeSet (gas); // put the commander ship in the station ImissionIGC* pCore = trekClient.GetCore(); ImodelIGC* pStation = pCore->GetModel (OT_station, 1030); IshipIGC* pCommander = pCore->GetShip (m_commanderID); pCommander->SetStation (static_cast<IstationIGC*> (pStation)); pCommander->SetCommand (c_cmdAccepted, NULL, c_cidDoNothing); pCommander->SetCommand (c_cmdCurrent, NULL, c_cidDoNothing); pCommander->SetAutopilot (false); // activate all the starting weapons trekClient.fGroupFire = true; // take the missiles off the ship IpartIGC* pPart = pShip->GetMountedPart (ET_Magazine, 0); if (pPart) pPart->Terminate (); }
//------------------------------------------------------------------------------ void DoDamageAction::Execute (void) { IshipIGC* pShip = trekClient.GetShip (); if (not m_bHull) { IshieldIGC* pShield = static_cast<IshieldIGC*> (pShip->GetMountedPart (ET_Shield, 0)); if (pShield and (pShield->GetFraction () > 0.2f)) pShip->ReceiveDamage (c_dmgidCollision, pShield->GetMaxStrength () * 0.03f, Time::Now (), Vector (-1.0f, 0.0f, 0.0f), Vector (1.0f, 0.0f, 0.0f), 0); } else { IshieldIGC* pShield = static_cast<IshieldIGC*> (pShip->GetMountedPart (ET_Shield, 0)); if (pShield and (pShield->GetFraction () > 0.25f)) pShield->SetFraction (0.2f); else if (pShip->GetFraction () > 0.5f) pShip->ReceiveDamage (c_dmgidCollision, 7.5f, Time::Now (), Vector (-1.0f, 0.0f, 0.0f), Vector (1.0f, 0.0f, 0.0f), 0); } }
//------------------------------------------------------------------------------ void RepairRearmAction::Execute (void) { IshipIGC* pShip = trekClient.GetShip (); // heal the ship entirely IshieldIGC* pShield = static_cast<IshieldIGC*> (pShip->GetMountedPart (ET_Shield, 0)); if (pShield) pShield->SetFraction (1.0f); pShip->SetFraction (1.0f); // reload the ammunition, energy, and fuel pShip->SetEnergy (pShip->GetHullType ()->GetMaxEnergy ()); pShip->SetAmmo (pShip->GetHullType ()->GetMaxAmmo ()); pShip->SetFuel (pShip->GetHullType ()->GetMaxFuel ()); // mdvalley: i needs defining outside the fors int i; // fill the first empty cargo slot with missiles for (i = -1; i > -c_maxCargo; i--) if (pShip->GetMountedPart (NA, i) == 0) { g_pMission->AddPartToShip (150, i, 0x7fff); break; } // fill the second empty cargo slot with ammo for (; i > -c_maxCargo; i--) if (pShip->GetMountedPart (NA, i) == 0) g_pMission->AddPartToShip (24, i, 0x7fff); // fill all subsequent slots with missiles for (; i > -c_maxCargo; i--) if (pShip->GetMountedPart (NA, i) == 0) g_pMission->AddPartToShip (150, i, 0x7fff); }
//------------------------------------------------------------------------------ void SetDroneNanAction::Execute (void) { IshipIGC* nanShip = trekClient.GetSide()->GetShip(nanShipID); IpartIGC* pPart = nanShip->GetMountedPart (ET_Weapon, 0); if (pPart) pPart->Terminate (); // Stick Nanite 2 on the front PartData pd; pd.partID = 190; pd.mountID = 0; pd.amount = 0; nanShip->CreateAndAddPart (&pd); }