// Constructor. BoardingPanel::BoardingPanel(PlayerInfo &player, const shared_ptr<Ship> &victim) : player(player), you(player.FlagshipPtr()), victim(victim), attackOdds(*you, *victim), defenseOdds(*victim, *you), initialCrew(you->Crew()) { // The escape key should close this panel rather than bringing up the main menu. SetInterruptible(false); // Figure out how much the victim's commodities are worth in the current // system and add them to the list of plunder. const System &system = *player.GetSystem(); for(const auto &it : victim->Cargo().Commodities()) plunder.emplace_back(it.first, it.second, system.Trade(it.first)); // You cannot plunder hand to hand weapons, because they are kept in the // crew's quarters, not mounted on the exterior of the ship. Certain other // outfits are also unplunderable, like mass expansions. for(const auto &it : victim->Outfits()) if(!it.first->Get("unplunderable")) plunder.emplace_back(it.first, it.second); // Some "ships" do not represent something the player could actually pilot. if(!victim->IsCapturable()) messages.emplace_back("This is not a ship that you can capture."); // Sort the plunder by price per ton. sort(plunder.begin(), plunder.end()); }
// Constructor. BoardingPanel::BoardingPanel(PlayerInfo &player, const shared_ptr<Ship> &victim) : player(player), you(player.FlagshipPtr()), victim(victim), attackOdds(*you, *victim), defenseOdds(*victim, *you) { // The escape key should close this panel rather than bringing up the main menu. SetInterruptible(false); // Figure out how much the victim's commodities are worth in the current // system and add them to the list of plunder. const System &system = *player.GetSystem(); for(const auto &it : victim->Cargo().Commodities()) if(it.second) plunder.emplace_back(it.first, it.second, system.Trade(it.first)); // You cannot plunder hand to hand weapons, because they are kept in the // crew's quarters, not mounted on the exterior of the ship. Certain other // outfits are also unplunderable, like mass expansions. auto sit = victim->Outfits().begin(); auto cit = victim->Cargo().Outfits().begin(); while(sit != victim->Outfits().end() || cit != victim->Cargo().Outfits().end()) { const Outfit *outfit = nullptr; int count = 0; // Merge the outfit lists from the ship itself and its cargo bay. If an // outfit exists in both locations, combine the counts. bool shipIsFirst = (cit == victim->Cargo().Outfits().end() || (sit != victim->Outfits().end() && sit->first <= cit->first)); bool cargoIsFirst = (sit == victim->Outfits().end() || (cit != victim->Cargo().Outfits().end() && cit->first <= sit->first)); if(shipIsFirst) { outfit = sit->first; // Don't include outfits that are installed and unplunderable. But, // "unplunderable" outfits can still be stolen from cargo. if(!sit->first->Get("unplunderable")) count += sit->second; ++sit; } if(cargoIsFirst) { outfit = cit->first; count += cit->second; ++cit; } if(outfit && count) plunder.emplace_back(outfit, count); } // Some "ships" do not represent something the player could actually pilot. if(!victim->IsCapturable()) messages.emplace_back("This is not a ship that you can capture."); // Sort the plunder by price per ton. sort(plunder.begin(), plunder.end()); }
BoardingPanel::BoardingPanel(PlayerInfo &player, const shared_ptr<Ship> &victim) : player(player), you(player.FlagshipPtr()), victim(victim), attackOdds(&*you, &*victim), defenseOdds(&*victim, &*you), initialCrew(you->Crew()) { SetInterruptible(false); const System &system = *player.GetSystem(); for(const auto &it : victim->Cargo().Commodities()) plunder.emplace_back(it.first, it.second, system.Trade(it.first)); // You cannot plunder hand to hand weapons, because they are kept in the // crew's quarters, not mounted on the exterior of the ship. for(const auto &it : victim->Outfits()) if(it.first->Category() != "Hand to Hand") plunder.emplace_back(it.first, it.second); sort(plunder.begin(), plunder.end()); }