//buildingutil.cpp ************************************* sint32 buildingutil_GetTotalUpkeep(const uint64 built_improvements, sint32 wonderLevel) { sint32 upkeep = 0; for(sint32 i = 0; i < g_theBuildingDB->NumRecords(); i++) { if(built_improvements & shiftbit(i)) { if(g_theBuildingDB->Get(i)->GetUpkeep() > wonderLevel) { upkeep += g_theBuildingDB->Get(i)->GetUpkeep(); } } } return upkeep; } sint32 buildingutil_GetBlgUpkeep(const sint32 building_type) { return g_theBuildingDB->Get(building_type)->GetUpkeep(); } sint32 buildingutil_GetCheapestBuilding(const uint64 built_improvements, sint32 wonderLevel) { sint32 lowcost = 0x7fffffff; sint32 low = -1; for(sint32 i = 0; i < g_theBuildingDB->NumRecords(); i++) { if(built_improvements & shiftbit(i)) { if(g_theBuildingDB->Get(i)->GetUpkeep() > wonderLevel && g_theBuildingDB->Get(i)->GetUpkeep() < lowcost) { lowcost = g_theBuildingDB->Get(i)->GetUpkeep(); low = i; } } } return low; } //GOVERNOR.cpp **************************** double wages_percent = (double) total_gold_cost / gross_gold; if ( wages_percent > max_wage_percent) { gold_test = false; } total_gold_cost += player_ptr->CalcTotalBuildingUpkeep(); total_gold += player_ptr->GetGold(); sint32 surplus = gross_gold - total_gold_cost; if ( (surplus < 0) && ((total_gold + surplus) > 0) && (surplus > (player_ptr->GetGold() * deficit_spending * -1)) ) { gold_test = false; } //citydata.cpp **************************************** sint32 CityData::SupportBuildings(bool projectedOnly) { sint32 buildingUpkeep = GetSupportBuildingsCost(); m_trade -= buildingUpkeep; if(m_trade < 0 && !projectedOnly) { sint32 wonderLevel = wonderutil_GetDecreaseMaintenance(g_player[m_owner]->m_builtWonders); while((-m_trade > g_player[m_owner]->GetGold()) && (m_built_improvements != 0)) { sint32 cheapBuilding = buildingutil_GetCheapestBuilding(m_built_improvements, wonderLevel); Assert(cheapBuilding >= 0); if(cheapBuilding < 0) break; SellBuilding(cheapBuilding, FALSE); SlicObject *so = new SlicObject("029NoMaint") ; so->AddRecipient(GetOwner()) ; so->AddCity(m_home_city) ; so->AddBuilding(cheapBuilding) ; g_slicEngine->Execute(so) ; } if(g_player[m_owner]->GetGold() < m_trade) { g_player[m_owner]->m_gold->SetLevel(0); } else { g_player[m_owner]->m_gold->SubIncome(-m_trade); } m_trade = 0; } if(!projectedOnly) g_player[m_owner]->m_gold->AddMaintenance(buildingUpkeep); return buildingUpkeep; } sint32 CityData::GetSupportBuildingsCost() { sint32 wonderLevel = wonderutil_GetDecreaseMaintenance(g_player[m_owner]->m_builtWonders); sint32 buildingUpkeep = buildingutil_GetTotalUpkeep(m_built_improvements, wonderLevel); return buildingUpkeep; } //FSGOLD.cpp ************************** double FSCompeteForGold::EstimateExpense(AiMain *ai) { sint32 p, s; double sum = 0.0; CityAgent *ca = NULL; BSetID id; BOOL is_unknown_id; for (ca = ai->m_city_set->First(id); ai->m_city_set->Last(); ca = ai->m_city_set->Next(id)) { p = ai->m_population->GetCityPopCount(ca->GetID().GetVal(), &is_unknown_id); s = ai->m_population->GetCitySlaveCount(ca->GetID().GetVal(), &is_unknown_id); sum += p - s; } return ai->m_player->GetTotalBuildingUpkeep() + ai->m_player->GetWagesPerPerson() * sum; //player.cpp ************************************* sint32 Player::CalcTotalBuildingUpkeep() { sint32 i, n; sint32 bu = 0; sint32 wonderLevel = wonderutil_GetDecreaseMaintenance(m_builtWonders); n = m_all_cities->Num(); for(i = 0; i < n; i++) { Unit *c = &(m_all_cities->Access(i)); bu += buildingutil_GetTotalUpkeep(c->GetImprovements(), wonderLevel); } return(bu); } //maintenance??????????????????????