/** * * * @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 nobUsual::DestroyBuilding() { // Arbeiter Bescheid sagen if(worker) { worker->LostWork(); worker = nullptr; } else gwg->GetPlayer(player).JobNotWanted(this); // Bestellte Waren Bescheid sagen for(std::list<Ware*>& orderedWare : ordered_wares) { for(Ware* ware : orderedWare) WareNotNeeded(ware); orderedWare.clear(); } // Events löschen GetEvMgr().RemoveEvent(orderware_ev); GetEvMgr().RemoveEvent(productivity_ev); // Inventur entsprechend verringern wegen den Waren, die vernichtetet werden for(unsigned i = 0; i < BLD_WORK_DESC[bldType_].waresNeeded.size(); ++i) { GoodType ware = BLD_WORK_DESC[bldType_].waresNeeded[i]; if(ware == GD_NOTHING) break; gwg->GetPlayer(player).DecreaseInventoryWare(ware, numWares[i]); } }
void nobMilitary::SetCoinsAllowed(const bool enabled) { if(coinsDisabled == !enabled) return; // Umstellen coinsDisabled = !enabled; // Wenn das von einem fremden Spieler umgestellt wurde (oder vom Replay), muss auch das visuelle umgestellt werden if(GAMECLIENT.GetPlayerID() != player || GAMECLIENT.IsReplayModeOn()) coinsDisabledVirtual = coinsDisabled; if(!coinsDisabled) SearchCoins(); // Order coins if we just enabled it else { // send coins back if just deactivated for(std::list<Ware*>::iterator it = ordered_coins.begin(); it != ordered_coins.end();) { // But only those, that are not just beeing carried in if((*it)->GetLocation() != this) { WareNotNeeded(*it); it = ordered_coins.erase(it); }else ++it; } } }
void noBuildingSite::Destroy_noBuildingSite() { // Bauarbeiter/Planierer Bescheid sagen if(builder) { builder->LostWork(); builder = NULL; }else if(planer) { planer->LostWork(); planer = NULL; }else gwg->GetPlayer(player).JobNotWanted(this); RTTR_Assert(!builder); RTTR_Assert(!planer); // Bestellte Waren Bescheid sagen for(std::list<Ware*>::iterator it = ordered_boards.begin(); it != ordered_boards.end(); ++it) WareNotNeeded(*it); ordered_boards.clear(); for(std::list<Ware*>::iterator it = ordered_stones.begin(); it != ordered_stones.end(); ++it) WareNotNeeded(*it); ordered_stones.clear(); // und Feld wird leer gwg->SetNO(pos, NULL); // Baustelle wieder aus der Liste entfernen - dont forget about expedition harbor status bool expeditionharbor = IsHarborBuildingSiteFromSea(); gwg->GetPlayer(player).RemoveBuildingSite(this); Destroy_noBaseBuilding(); // Hafenbaustelle? if(expeditionharbor) { // Land neu berechnen nach zerstören weil da schon straßen etc entfernt werden gwg->RecalcTerritory(*this, true, false); } gwg->RecalcBQAroundPointBig(pos); }
void nobMilitary::CancelOrders() { // Soldaten zurückschicken for(SortedTroops::iterator it = ordered_troops.begin(); it != ordered_troops.end(); ++it) (*it)->NotNeeded(); ordered_troops.clear(); // Goldmünzen zurückschicken for(std::list<Ware*>::iterator it = ordered_coins.begin(); it != ordered_coins.end(); ++it) WareNotNeeded(*it); ordered_coins.clear(); }
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(); }