/** * * * @author OLiver */ void nobUsual::Destroy_nobUsual() { // Arbeiter Bescheid sagen if(worker) { worker->LostWork(); worker = NULL; }else gwg->GetPlayer(player).JobNotWanted(this); // Bestellte Waren Bescheid sagen for(unsigned i = 0; i < USUAL_BUILDING_CONSTS[type_ - 10].wares_needed_count; ++i) { for(std::list<Ware*>::iterator it = ordered_wares[i].begin(); it != ordered_wares[i].end(); ++it) WareNotNeeded((*it)); ordered_wares[i].clear(); } // Events löschen em->RemoveEvent(orderware_ev); em->RemoveEvent(productivity_ev); orderware_ev = NULL; productivity_ev = NULL; // Gebäude wieder aus der Liste entfernen gwg->GetPlayer(player).RemoveUsualBuilding(this); // Inventur entsprechend verringern wegen den Waren, die vernichtetet werden for(unsigned i = 0; i < USUAL_BUILDING_CONSTS[type_ - 10].wares_needed_count; ++i) gwg->GetPlayer(player).DecreaseInventoryWare(USUAL_BUILDING_CONSTS[type_ - 10].wares_needed[i], wares[i]); Destroy_noBuilding(); }
void nobBaseMilitary::Destroy_nobBaseMilitary() { // Soldaten Bescheid sagen, die evtl auf Mission sind // ATTENTION: iterators can be deleted in HomeDestroyed, -> copy first std::vector<nofActiveSoldier*> tmposroopsOnMission(troops_on_mission.begin(), troops_on_mission.end()); for(std::vector<nofActiveSoldier*>::iterator it = tmposroopsOnMission.begin(); it != tmposroopsOnMission.end(); ++it) (*it)->HomeDestroyed(); // Und die, die das Gebäude evtl gerade angreifen // ATTENTION: iterators can be deleted in AttackedGoalDestroyed, -> copy first std::vector<nofAttacker*> tmpAggressors(aggressors.begin(), aggressors.end()); for(std::vector<nofAttacker*>::iterator it = tmpAggressors.begin(); it != tmpAggressors.end(); ++it) (*it)->AttackedGoalDestroyed(); // Aggressiv-Verteidigenden Soldaten Bescheid sagen, dass sie nach Hause gehen können std::vector<nofAggressiveDefender*> tmpDefenders(aggressive_defenders.begin(), aggressive_defenders.end()); for(std::vector<nofAggressiveDefender*>::iterator it = tmpDefenders.begin(); it != tmpDefenders.end(); ++it) (*it)->AttackedGoalDestroyed(); // Verteidiger Bescheid sagen if(defender_) defender_->HomeDestroyed(); // Warteschlangenevent vernichten em->RemoveEvent(leaving_event); // Soldaten, die noch in der Warteschlange hängen, rausschicken for(std::list<noFigure*>::iterator it = leave_house.begin(); it != leave_house.end(); ++it) { gwg->AddFigure((*it), pos); if((*it)->DoJobWorks() && dynamic_cast<nofActiveSoldier*>(*it)) // Wenn er Job-Arbeiten verrichtet, ists ein ActiveSoldier oder TradeDonkey --> dem Soldat muss extra noch Bescheid gesagt werden! static_cast<nofActiveSoldier*>(*it)->HomeDestroyedAtBegin(); else { (*it)->Abrogate(); (*it)->StartWandering(); (*it)->StartWalking(RANDOM.Rand(__FILE__, __LINE__, GetObjId(), 6)); } } leave_house.clear(); // Umgebung nach feindlichen Militärgebäuden absuchen und die ihre Grenzflaggen neu berechnen lassen // da, wir ja nicht mehr existieren sortedMilitaryBlds buildings = gwg->LookForMilitaryBuildings(pos, 4); for(sortedMilitaryBlds::iterator it = buildings.begin(); it != buildings.end(); ++it) { if((*it)->GetPlayer() != player && (*it)->GetBuildingType() >= BLD_BARRACKS && (*it)->GetBuildingType() <= BLD_FORTRESS) static_cast<nobMilitary*>(*it)->LookForEnemyBuildings(this); } Destroy_noBuilding(); }