示例#1
0
void nobStorehouse::Destroy_nobStorehouse()
{
    // Der Wirtschaftsverwaltung Bescheid sagen
    gwg->GetPlayer(player)->RemoveWarehouse(this);

    Destroy_nobBaseWarehouse();
}
示例#2
0
void nobHQ::Destroy_nobHQ()
{
    Destroy_nobBaseWarehouse();

    // 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.
    gwg->RecalcTerritory(*this, true, false);

    // Wieder aus dem Militärquadrat rauswerfen
    gwg->GetMilitarySquares().Remove(this);
}
void nobHarborBuilding::Destroy()
{
	em->RemoveEvent(orderware_ev);
	players->getElement(player)->HarborDestroyed(this);

	// Der Wirtschaftsverwaltung Bescheid sagen
	gwg->GetPlayer(player)->RemoveWarehouse(this);
	gwg->GetPlayer(player)->RemoveHarbor(this);

	// Baumaterialien in der Inventur verbuchen
	if(expedition.active)
	{
		gwg->GetPlayer(player)->DecreaseInventoryWare(GD_BOARDS,expedition.boards);
		gwg->GetPlayer(player)->DecreaseInventoryWare(GD_STONES,expedition.stones);

		// Und Bauarbeiter (später) rausschicken
		if(expedition.builder)
			++real_goods.people[JOB_BUILDER];
	}

	// Waiting Wares löschen
	for(std::list<Ware*>::iterator it = wares_for_ships.begin();it!=wares_for_ships.end();++it)
	{
		(*it)->WareLost(player);
		delete (*it);
	}
	wares_for_ships.clear();

	// Leute, die noch aufs Schiff warten, rausschicken
	for(std::list<FigureForShip>::iterator it = figures_for_ships.begin();it!=figures_for_ships.end();++it)
	{
		gwg->AddFigure(it->fig,x,y);

		it->fig->Abrogate();
		it->fig->StartWandering();
		it->fig->StartWalking(RANDOM.Rand(__FILE__,__LINE__,obj_id,6));
	}
	figures_for_ships.clear();
	
	for(std::list<SoldierForShip>::iterator it = soldiers_for_ships.begin();it!=soldiers_for_ships.end();++it)
	{
		gwg->AddFigure(it->attacker,x,y);

		it->attacker->CancelAtHomeMilitaryBuilding();
		it->attacker->StartWandering();
		it->attacker->StartWalking(RANDOM.Rand(__FILE__,__LINE__,obj_id,6));
	}
	soldiers_for_ships.clear();
	
	

	Destroy_nobBaseWarehouse();

	// 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.
	gwg->RecalcTerritory(this,HARBOR_ALONE_RADIUS,true, false);

	// Wieder aus dem Militärquadrat rauswerfen
	gwg->GetMilitarySquare(x,y).erase(this);


}
示例#4
0
void nobHarborBuilding::Destroy()
{
    em->RemoveEvent(orderware_ev);

    // Der Wirtschaftsverwaltung Bescheid sagen
    GameClientPlayer& owner = gwg->GetPlayer(player);
    owner.RemoveHarbor(this);
    // Remove also the warehouse so lost wares won't consider this one!
    owner.RemoveWarehouse(this);
    owner.HarborDestroyed(this);

    // Baumaterialien in der Inventur verbuchen
    if(expedition.active)
    {
        owner.DecreaseInventoryWare(GD_BOARDS, expedition.boards);
        owner.DecreaseInventoryWare(GD_STONES, expedition.stones);

        // Und Bauarbeiter (später) rausschicken
        if(expedition.builder)
            inventory.Add(JOB_BUILDER);
        else
            owner.OneJobNotWanted(JOB_BUILDER, this);
    }
    //cancel order for scouts
    if (exploration_expedition.active)
    {
		inventory.real.Add(JOB_SCOUT, exploration_expedition.scouts);
        for (unsigned i = exploration_expedition.scouts; i < SCOUTS_EXPLORATION_EXPEDITION; i++)
        {
            owner.OneJobNotWanted(JOB_SCOUT, this);
        }
    }
	//cancel all jobs wanted for this building
	owner.JobNotWanted(this,true);
    // Waiting Wares löschen
    for(std::list<Ware*>::iterator it = wares_for_ships.begin(); it != wares_for_ships.end(); ++it)
    {
        (*it)->WareLost(player);
        (*it)->Destroy();
        delete (*it);
    }
    wares_for_ships.clear();

    // Leute, die noch aufs Schiff warten, rausschicken
    for(std::list<FigureForShip>::iterator it = figures_for_ships.begin(); it != figures_for_ships.end(); ++it)
    {
        noFigure* figure = it->fig;
        gwg->AddFigure(figure, pos);

        figure->Abrogate();
        figure->StartWandering();
        figure->StartWalking(RANDOM.Rand(__FILE__, __LINE__, GetObjId(), 6));
    }
    figures_for_ships.clear();

    for(std::list<SoldierForShip>::iterator it = soldiers_for_ships.begin(); it != soldiers_for_ships.end(); ++it)
    {
        nofAttacker* soldier = it->attacker;
        gwg->AddFigure(soldier, pos);

        soldier->CancelSeaAttack();
        RTTR_Assert(!soldier->GetAttackedGoal());
        RTTR_Assert(soldier->HasNoHome());
        RTTR_Assert(soldier->HasNoGoal());
        soldier->StartWandering();
        soldier->StartWalking(RANDOM.Rand(__FILE__, __LINE__, GetObjId(), 6));
    }
    soldiers_for_ships.clear();

    Destroy_nobBaseWarehouse();

    // 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.
    gwg->RecalcTerritory(*this, true, false);

    // Wieder aus dem Militärquadrat rauswerfen
    gwg->GetMilitarySquares().Remove(this);
}