void nobMilitary::Destroy_nobMilitary() { // Remove from military square and buildings first, to avoid e.g. sending canceled soldiers back to this building gwg->GetPlayer(player).RemoveMilitaryBuilding(this); gwg->GetMilitarySquares().Remove(this); // Bestellungen stornieren CancelOrders(); // Soldaten rausschicken for(SortedTroops::iterator it = troops.begin(); it != troops.end(); ++it) (*it)->InBuildingDestroyed(); troops.clear(); // Inform far-away capturers for(std::list<nofAttacker*>::iterator it = far_away_capturers.begin(); it != far_away_capturers.end(); ++it) (*it)->AttackedGoalDestroyed(); far_away_capturers.clear(); // Events ggf. entfernen GetEvMgr().RemoveEvent(goldorder_event); GetEvMgr().RemoveEvent(upgrade_event); // übriggebliebene Goldmünzen in der Inventur abmelden gwg->GetPlayer(player).DecreaseInventoryWare(GD_COINS, coins); Destroy_nobBaseMilitary(); // Land drumherum neu berechnen (nur wenn es schon besetzt wurde!) // Nach dem BaseDestroy erst, da in diesem erst das Feuer gesetzt, die Straße gelöscht wird usw. if(!new_built) gwg->RecalcTerritory(*this, true, false); gwg->GetNotifications().publish(BuildingNote(BuildingNote::Lost, player, pos, type_)); }
void nobBaseWarehouse::Destroy_nobBaseWarehouse() { if(GetBuildingType() != BLD_HARBORBUILDING) { // Aus der Warenhausliste entfernen gwg->GetPlayer(player).RemoveWarehouse(this); }else { // Harbors should also remove the warehouse RTTR_Assert(!helpers::contains(gwg->GetPlayer(player).GetStorehouses(), this)); } // Den Waren und Figuren Bescheid sagen, die zu uns auf den Weg sind, dass wir nun nicht mehr existieren for(std::list<noFigure*>::iterator it = dependent_figures.begin(); it != dependent_figures.end(); ++it) (*it)->GoHome(); dependent_figures.clear(); for(std::list<Ware*>::iterator it = dependent_wares.begin(); it!=dependent_wares.end(); ++it) WareNotNeeded(*it); dependent_wares.clear(); // ggf. Events abmelden em->RemoveEvent(recruiting_event); em->RemoveEvent(producinghelpers_event); em->RemoveEvent(empty_event); em->RemoveEvent(store_event); // Waiting Wares löschen for(std::list<Ware*>::iterator it = waiting_wares.begin(); it != waiting_wares.end(); ++it) { (*it)->WareLost(player); delete (*it); } waiting_wares.clear(); // restliche Warenbestände von der Inventur wieder abziehen for(unsigned int i = 0; i < WARE_TYPES_COUNT; ++i) gwg->GetPlayer(player).DecreaseInventoryWare(GoodType(i), inventory[GoodType(i)]); // Objekt, das die flüchtenden Leute nach und nach ausspuckt, erzeugen new BurnedWarehouse(pos, player, inventory.real.people); Destroy_nobBaseMilitary(); }