void nobBaseWarehouse::AddActiveSoldier(nofActiveSoldier* soldier)
{
    // Add soldier. If he is still in the leave-queue, then don't add him to the visual settings again
    if(helpers::contains(leave_house, soldier))
        inventory.real.Add(soldier->GetJobType());
    else
        inventory.Add(SOLDIER_JOBS[soldier->GetRank()]);

    // Evtl. geht der Soldat wieder in die Reserve
    RefreshReserve(soldier->GetRank());

    // Truppen prüfen in allen Häusern
    gwg->GetPlayer(player).RegulateAllTroops();

    // Returned home
    if(soldier == defender_)
        NoDefender();
    else
    {
        // Ggf. war er auf Mission
        RTTR_Assert(helpers::contains(troops_on_mission, soldier));
        troops_on_mission.remove(soldier);
    }

    // und Soldat vernichten
    soldier->ResetHome();
    em->AddToKillList(soldier);
}
void nobBaseWarehouse::SetRealReserve(const unsigned rank, const unsigned count)
{
    reserve_soldiers_claimed_real[rank] = count;

    // Replay oder anderer Spieler? Dann die visuellen auch erhöhen
    if(GAMECLIENT.IsReplayModeOn() || GAMECLIENT.GetPlayerID() != player)
        reserve_soldiers_claimed_visual[rank] = count;

    // Geforderte Soldaten ggf. einbeziehen
    RefreshReserve(rank);
}
/// Prüft verschiedene Sachen, falls ein neuer Mensch das Haus betreten hat
void nobBaseWarehouse::CheckJobsForNewFigure(const Job job)
{
    // Evtl ging ein Gehilfe rein --> versuchen zu rekrutieren
    if(job == JOB_HELPER)
        TryRecruiting();

    if(job >= JOB_PRIVATE && job <= JOB_GENERAL)
    {
        // Reserve prüfen
        RefreshReserve(job - JOB_PRIVATE);
        if(inventory[job] > 0)
        {
            // Truppen prüfen in allen Häusern
            gwg->GetPlayer(player).NewSoldiersAvailable(inventory[job]);
        }
    }
    else
    {
        if(job == JOB_PACKDONKEY)
        {
            // Straße für Esel suchen
            noRoadNode* goal;
            if(RoadSegment* road = gwg->GetPlayer(player).FindRoadForDonkey(this, &goal))
                road->GotDonkey(OrderDonkey(road, goal));
        }
        else
        {
            // Evtl. Abnehmer für die Figur wieder finden
            GameClientPlayer& owner = gwg->GetPlayer(player);
            owner.FindWarehouseForAllJobs(job);
            // Wenns ein Träger war, auch Wege prüfen
            if(job == JOB_HELPER && inventory[JOB_HELPER] == 1)
            {
                // evtl als Träger auf Straßen schicken
                owner.FindWarehouseForAllRoads();
                // evtl Träger mit Werkzeug kombiniert -> neuer Beruf
                owner.FindWarehouseForAllJobs(JOB_NOTHING);
            }
        }
    }

    // Evtl den Typen gleich wieder auslagern, falls erforderlich
    CheckOuthousing(true, job);
}
Ejemplo n.º 4
0
nobHQ::nobHQ(const MapPoint pos, const unsigned char player, const Nation nation, const bool isTent)
    : nobBaseWarehouse(BLD_HEADQUARTERS, pos, player, nation), isTent_(isTent)
{
    // StartWaren setzen
    switch(gwg->GetGGS().startWares)
    {
        // sehr wenig
        case 0:
            inventory.visual.goods[GD_BEER] = 0;
            inventory.visual.goods[GD_TONGS] = 1;
            inventory.visual.goods[GD_HAMMER] = 4;
            inventory.visual.goods[GD_AXE] = 1;
            inventory.visual.goods[GD_SAW] = 0;
            inventory.visual.goods[GD_PICKAXE] = 0;
            inventory.visual.goods[GD_SHOVEL] = 1;
            inventory.visual.goods[GD_CRUCIBLE] = 1;
            inventory.visual.goods[GD_RODANDLINE] = 1; //??
            inventory.visual.goods[GD_SCYTHE] = 2;     //??
            inventory.visual.goods[GD_WATEREMPTY] = 0;
            inventory.visual.goods[GD_WATER] = 0;
            inventory.visual.goods[GD_CLEAVER] = 0;
            inventory.visual.goods[GD_ROLLINGPIN] = 1;
            inventory.visual.goods[GD_BOW] = 0;
            inventory.visual.goods[GD_BOAT] = 0;
            inventory.visual.goods[GD_SWORD] = 0;
            inventory.visual.goods[GD_IRON] = 0;
            inventory.visual.goods[GD_FLOUR] = 0;
            inventory.visual.goods[GD_FISH] = 1;
            inventory.visual.goods[GD_BREAD] = 2;
            inventory.visual.goods[GD_SHIELDROMANS] = 0;
            inventory.visual.goods[GD_WOOD] = 6;
            inventory.visual.goods[GD_BOARDS] = 11;
            inventory.visual.goods[GD_STONES] = 17;
            inventory.visual.goods[GD_SHIELDVIKINGS] = 0;
            inventory.visual.goods[GD_SHIELDAFRICANS] = 0;
            inventory.visual.goods[GD_GRAIN] = 0;
            inventory.visual.goods[GD_COINS] = 0;
            inventory.visual.goods[GD_GOLD] = 0;
            inventory.visual.goods[GD_IRONORE] = 4;
            inventory.visual.goods[GD_COAL] = 4;
            inventory.visual.goods[GD_MEAT] = 0;
            inventory.visual.goods[GD_HAM] = 0;
            inventory.visual.goods[GD_SHIELDJAPANESE] = 0;

            inventory.visual.people[JOB_HELPER] = 13;
            inventory.visual.people[JOB_WOODCUTTER] = 2;
            inventory.visual.people[JOB_FISHER] = 0;
            inventory.visual.people[JOB_FORESTER] = 1;
            inventory.visual.people[JOB_CARPENTER] = 1;
            inventory.visual.people[JOB_STONEMASON] = 1;
            inventory.visual.people[JOB_HUNTER] = 1;
            inventory.visual.people[JOB_FARMER] = 0;
            inventory.visual.people[JOB_MILLER] = 0;
            inventory.visual.people[JOB_BAKER] = 0;
            inventory.visual.people[JOB_BUTCHER] = 0;
            inventory.visual.people[JOB_MINER] = 2;
            inventory.visual.people[JOB_BREWER] = 0;
            inventory.visual.people[JOB_PIGBREEDER] = 0;
            inventory.visual.people[JOB_DONKEYBREEDER] = 0;
            inventory.visual.people[JOB_IRONFOUNDER] = 0;
            inventory.visual.people[JOB_MINTER] = 0;
            inventory.visual.people[JOB_METALWORKER] = 0;
            inventory.visual.people[JOB_ARMORER] = 1;
            inventory.visual.people[JOB_BUILDER] = 2;
            inventory.visual.people[JOB_PLANER] = 1;
            inventory.visual.people[JOB_PRIVATE] = 13;
            inventory.visual.people[JOB_PRIVATEFIRSTCLASS] = 0;
            inventory.visual.people[JOB_SERGEANT] = 0;
            inventory.visual.people[JOB_OFFICER] = 0;
            inventory.visual.people[JOB_GENERAL] = 0;
            inventory.visual.people[JOB_GEOLOGIST] = 2;
            inventory.visual.people[JOB_SHIPWRIGHT] = 0;
            inventory.visual.people[JOB_SCOUT] = 1;
            inventory.visual.people[JOB_PACKDONKEY] = 2;
            break;

        // Wenig
        case 1:

            inventory.visual.goods[GD_BEER] = 0;
            inventory.visual.goods[GD_TONGS] = 0;
            inventory.visual.goods[GD_HAMMER] = 8;
            inventory.visual.goods[GD_AXE] = 3;
            inventory.visual.goods[GD_SAW] = 1;
            inventory.visual.goods[GD_PICKAXE] = 1;
            inventory.visual.goods[GD_SHOVEL] = 2;
            inventory.visual.goods[GD_CRUCIBLE] = 2;
            inventory.visual.goods[GD_RODANDLINE] = 3;
            inventory.visual.goods[GD_SCYTHE] = 4;
            inventory.visual.goods[GD_WATEREMPTY] = 0;
            inventory.visual.goods[GD_WATER] = 0;
            inventory.visual.goods[GD_CLEAVER] = 1;
            inventory.visual.goods[GD_ROLLINGPIN] = 1;
            inventory.visual.goods[GD_BOW] = 1;
            inventory.visual.goods[GD_BOAT] = 6;
            inventory.visual.goods[GD_SWORD] = 0;
            inventory.visual.goods[GD_IRON] = 0;
            inventory.visual.goods[GD_FLOUR] = 0;
            inventory.visual.goods[GD_FISH] = 2;
            inventory.visual.goods[GD_BREAD] = 4;
            inventory.visual.goods[GD_SHIELDROMANS] = 0;
            inventory.visual.goods[GD_WOOD] = 12;
            inventory.visual.goods[GD_BOARDS] = 22;
            inventory.visual.goods[GD_STONES] = 34;
            inventory.visual.goods[GD_SHIELDVIKINGS] = 0;
            inventory.visual.goods[GD_SHIELDAFRICANS] = 0;
            inventory.visual.goods[GD_GRAIN] = 0;
            inventory.visual.goods[GD_COINS] = 0;
            inventory.visual.goods[GD_GOLD] = 0;
            inventory.visual.goods[GD_IRONORE] = 8;
            inventory.visual.goods[GD_COAL] = 8;
            inventory.visual.goods[GD_MEAT] = 3;
            inventory.visual.goods[GD_HAM] = 0;
            inventory.visual.goods[GD_SHIELDJAPANESE] = 0;

            inventory.visual.people[JOB_HELPER] = 26;
            inventory.visual.people[JOB_WOODCUTTER] = 4;
            inventory.visual.people[JOB_FISHER] = 0;
            inventory.visual.people[JOB_FORESTER] = 2;
            inventory.visual.people[JOB_CARPENTER] = 2;
            inventory.visual.people[JOB_STONEMASON] = 2;
            inventory.visual.people[JOB_HUNTER] = 1;
            inventory.visual.people[JOB_FARMER] = 0;
            inventory.visual.people[JOB_MILLER] = 0;
            inventory.visual.people[JOB_BAKER] = 0;
            inventory.visual.people[JOB_BUTCHER] = 0;
            inventory.visual.people[JOB_MINER] = 5;
            inventory.visual.people[JOB_BREWER] = 0;
            inventory.visual.people[JOB_PIGBREEDER] = 0;
            inventory.visual.people[JOB_DONKEYBREEDER] = 0;
            inventory.visual.people[JOB_IRONFOUNDER] = 0;
            inventory.visual.people[JOB_MINTER] = 0;
            inventory.visual.people[JOB_METALWORKER] = 1;
            inventory.visual.people[JOB_ARMORER] = 2;
            inventory.visual.people[JOB_BUILDER] = 5;
            inventory.visual.people[JOB_PLANER] = 3;
            inventory.visual.people[JOB_PRIVATE] = 26;
            inventory.visual.people[JOB_PRIVATEFIRSTCLASS] = 0;
            inventory.visual.people[JOB_SERGEANT] = 0;
            inventory.visual.people[JOB_OFFICER] = 0;
            inventory.visual.people[JOB_GENERAL] = 0;
            inventory.visual.people[JOB_GEOLOGIST] = 3;
            inventory.visual.people[JOB_SHIPWRIGHT] = 0;
            inventory.visual.people[JOB_SCOUT] = 1;
            inventory.visual.people[JOB_PACKDONKEY] = 4;
            break;

        // Mittel
        case 2:

            inventory.visual.goods[GD_BEER] = 6;
            inventory.visual.goods[GD_TONGS] = 0;
            inventory.visual.goods[GD_HAMMER] = 16;
            inventory.visual.goods[GD_AXE] = 6;
            inventory.visual.goods[GD_SAW] = 2;
            inventory.visual.goods[GD_PICKAXE] = 2;
            inventory.visual.goods[GD_SHOVEL] = 4;
            inventory.visual.goods[GD_CRUCIBLE] = 4;
            inventory.visual.goods[GD_RODANDLINE] = 6;
            inventory.visual.goods[GD_SCYTHE] = 8;
            inventory.visual.goods[GD_WATEREMPTY] = 0;
            inventory.visual.goods[GD_WATER] = 0;
            inventory.visual.goods[GD_CLEAVER] = 2;
            inventory.visual.goods[GD_ROLLINGPIN] = 2;
            inventory.visual.goods[GD_BOW] = 2;
            inventory.visual.goods[GD_BOAT] = 12;
            inventory.visual.goods[GD_SWORD] = 6;
            inventory.visual.goods[GD_IRON] = 0;
            inventory.visual.goods[GD_FLOUR] = 0;
            inventory.visual.goods[GD_FISH] = 4;
            inventory.visual.goods[GD_BREAD] = 8;
            inventory.visual.goods[GD_SHIELDROMANS] = 6;
            inventory.visual.goods[GD_WOOD] = 24;
            inventory.visual.goods[GD_BOARDS] = 44;
            inventory.visual.goods[GD_STONES] = 68;
            inventory.visual.goods[GD_SHIELDVIKINGS] = 0;
            inventory.visual.goods[GD_SHIELDAFRICANS] = 0;
            inventory.visual.goods[GD_GRAIN] = 0;
            inventory.visual.goods[GD_COINS] = 0;
            inventory.visual.goods[GD_GOLD] = 0;
            inventory.visual.goods[GD_IRONORE] = 16;
            inventory.visual.goods[GD_COAL] = 16;
            inventory.visual.goods[GD_MEAT] = 6;
            inventory.visual.goods[GD_HAM] = 0;
            inventory.visual.goods[GD_SHIELDJAPANESE] = 0;

            inventory.visual.people[JOB_HELPER] = 52;
            inventory.visual.people[JOB_WOODCUTTER] = 8;
            inventory.visual.people[JOB_FISHER] = 0;
            inventory.visual.people[JOB_FORESTER] = 4;
            inventory.visual.people[JOB_CARPENTER] = 4;
            inventory.visual.people[JOB_STONEMASON] = 4;
            inventory.visual.people[JOB_HUNTER] = 2;
            inventory.visual.people[JOB_FARMER] = 0;
            inventory.visual.people[JOB_MILLER] = 0;
            inventory.visual.people[JOB_BAKER] = 0;
            inventory.visual.people[JOB_BUTCHER] = 0;
            inventory.visual.people[JOB_MINER] = 10;
            inventory.visual.people[JOB_BREWER] = 0;
            inventory.visual.people[JOB_PIGBREEDER] = 0;
            inventory.visual.people[JOB_DONKEYBREEDER] = 0;
            inventory.visual.people[JOB_IRONFOUNDER] = 0;
            inventory.visual.people[JOB_MINTER] = 0;
            inventory.visual.people[JOB_METALWORKER] = 2;
            inventory.visual.people[JOB_ARMORER] = 4;
            inventory.visual.people[JOB_BUILDER] = 10;
            inventory.visual.people[JOB_PLANER] = 6;
            inventory.visual.people[JOB_PRIVATE] = 46;
            inventory.visual.people[JOB_PRIVATEFIRSTCLASS] = 0;
            inventory.visual.people[JOB_SERGEANT] = 0;
            inventory.visual.people[JOB_OFFICER] = 0;
            inventory.visual.people[JOB_GENERAL] = 0;
            inventory.visual.people[JOB_GEOLOGIST] = 6;
            inventory.visual.people[JOB_SHIPWRIGHT] = 0;
            inventory.visual.people[JOB_SCOUT] = 2;
            inventory.visual.people[JOB_PACKDONKEY] = 8;
            break;

        // Viel
        case 3:
            inventory.visual.goods[GD_BEER] = 12;
            inventory.visual.goods[GD_TONGS] = 0;
            inventory.visual.goods[GD_HAMMER] = 32;
            inventory.visual.goods[GD_AXE] = 12;
            inventory.visual.goods[GD_SAW] = 4;
            inventory.visual.goods[GD_PICKAXE] = 4;
            inventory.visual.goods[GD_SHOVEL] = 8;
            inventory.visual.goods[GD_CRUCIBLE] = 8;
            inventory.visual.goods[GD_RODANDLINE] = 12;
            inventory.visual.goods[GD_SCYTHE] = 16;
            inventory.visual.goods[GD_WATEREMPTY] = 0;
            inventory.visual.goods[GD_WATER] = 0;
            inventory.visual.goods[GD_CLEAVER] = 4;
            inventory.visual.goods[GD_ROLLINGPIN] = 4;
            inventory.visual.goods[GD_BOW] = 4;
            inventory.visual.goods[GD_BOAT] = 24;
            inventory.visual.goods[GD_SWORD] = 12;
            inventory.visual.goods[GD_IRON] = 0;
            inventory.visual.goods[GD_FLOUR] = 0;
            inventory.visual.goods[GD_FISH] = 8;
            inventory.visual.goods[GD_BREAD] = 16;
            inventory.visual.goods[GD_SHIELDROMANS] = 12;
            inventory.visual.goods[GD_WOOD] = 48;
            inventory.visual.goods[GD_BOARDS] = 88;
            inventory.visual.goods[GD_STONES] = 136;
            inventory.visual.goods[GD_SHIELDVIKINGS] = 0;
            inventory.visual.goods[GD_SHIELDAFRICANS] = 0;
            inventory.visual.goods[GD_GRAIN] = 0;
            inventory.visual.goods[GD_COINS] = 0;
            inventory.visual.goods[GD_GOLD] = 0;
            inventory.visual.goods[GD_IRONORE] = 32;
            inventory.visual.goods[GD_COAL] = 32;
            inventory.visual.goods[GD_MEAT] = 12;
            inventory.visual.goods[GD_HAM] = 0;
            inventory.visual.goods[GD_SHIELDJAPANESE] = 0;

            inventory.visual.people[JOB_HELPER] = 104;
            inventory.visual.people[JOB_WOODCUTTER] = 16;
            inventory.visual.people[JOB_FISHER] = 0;
            inventory.visual.people[JOB_FORESTER] = 8;
            inventory.visual.people[JOB_CARPENTER] = 8;
            inventory.visual.people[JOB_STONEMASON] = 8;
            inventory.visual.people[JOB_HUNTER] = 4;
            inventory.visual.people[JOB_FARMER] = 0;
            inventory.visual.people[JOB_MILLER] = 0;
            inventory.visual.people[JOB_BAKER] = 0;
            inventory.visual.people[JOB_BUTCHER] = 0;
            inventory.visual.people[JOB_MINER] = 20;
            inventory.visual.people[JOB_BREWER] = 0;
            inventory.visual.people[JOB_PIGBREEDER] = 0;
            inventory.visual.people[JOB_DONKEYBREEDER] = 0;
            inventory.visual.people[JOB_IRONFOUNDER] = 0;
            inventory.visual.people[JOB_MINTER] = 0;
            inventory.visual.people[JOB_METALWORKER] = 4;
            inventory.visual.people[JOB_ARMORER] = 8;
            inventory.visual.people[JOB_BUILDER] = 20;
            inventory.visual.people[JOB_PLANER] = 12;
            inventory.visual.people[JOB_PRIVATE] = 92;
            inventory.visual.people[JOB_PRIVATEFIRSTCLASS] = 0;
            inventory.visual.people[JOB_SERGEANT] = 0;
            inventory.visual.people[JOB_OFFICER] = 0;
            inventory.visual.people[JOB_GENERAL] = 0;
            inventory.visual.people[JOB_GEOLOGIST] = 12;
            inventory.visual.people[JOB_SHIPWRIGHT] = 0;
            inventory.visual.people[JOB_SCOUT] = 4;
            inventory.visual.people[JOB_PACKDONKEY] = 16;
            break;
    }

    inventory.real = inventory.visual;

    // Aktuellen Warenbestand zur aktuellen Inventur dazu addieren
    AddToInventory();

    // Take 1 as the reserve per rank
    for(unsigned i = 0; i <= gwg->GetGGS().GetMaxMilitaryRank(); ++i)
    {
        reserve_soldiers_claimed_visual[i] = reserve_soldiers_claimed_real[i] = 1;
        RefreshReserve(i);
    }

    // Evtl. liegen am Anfang Waffen im HQ, sodass rekrutiert werden muss
    TryRecruiting();

    // ins Militärquadrat einfügen
    gwg->GetMilitarySquares().Add(this);
    gwg->RecalcTerritory(*this, TerritoryChangeReason::Build);
}