Ejemplo n.º 1
0
/**
 *
 *
 *  @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();
}
Ejemplo n.º 2
0
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]);
    }
}
Ejemplo n.º 3
0
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;
        }
    }
}
Ejemplo n.º 4
0
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);
}
Ejemplo n.º 5
0
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();
}