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); }
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); }