Цитата Сообщение от NeserVET Посмотреть сообщение
Я сделал несколько изменений
1) Немного подправил алгоритм в CvCity::doYields() после строчки //VET NewCapacity - begin 8/9
2) Сделал новую функцию CvCity::calculateTotalProducedYields() и заменил ею алгоритмы в CvDLLWidgetData.cpp и CvMainInterface.py
Привет, NeseryozniyVET!

Патч, оптимизирующий вывод данных на экран, мне удалось-таки совместить с текущей версией мода. При первой компиляции я получил букет ошибок:

Код:
CvGameCoreDLL\CvCity.cpp(4191): error C2065: 'pHeadSelectedCity' : undeclared identifier
CvGameCoreDLL\CvCity.cpp(4191): error C2227: left of '->calculateActualYieldProduced' must point to class/struct/union type is ''unknown-type''
CvGameCoreDLL\CvCity.cpp(4205): error C2227: left of '->calculateNetYield' must point to class/struct/union type is ''unknown-type''
CvGameCoreDLL\CvCity.cpp(4191): error C2227: left of '->getBaseRawYieldProduced' must point to class/struct/union type is ''unknown-type''
CvGameCoreDLL\CvCity.cpp(4191): error C3861: 'pHeadSelectedCity': identifier not found, even with argument-dependent lookup
CvGameCoreDLL\CvCity.cpp(4205): error C3861: 'pHeadSelectedCity': identifier not found, even with argument-dependent lookup
Однако как следует из первой строки все они имели одну первопричину:
Код:
'pHeadSelectedCity' : undeclared identifier
Я сначала по-дурости попытался выполнить "пожелания" программы-компилятора, а именно ввести и описать новую переменную 'pHeadSelectedCity'. Обычно такой трюк приводил меня в конце концов к успеху. После пары попыток мне действительно удалось это сделать и я смог без ошибок скомпилировать CvGameCoreDLL.dll. Однако вскоре оказалось, это был тупиковый путь. Мод с новой CvGameCoreDLL.dll запускался, но CvMainInterface.py естественно выдавал ошибку, поскольку TotalProducedYields не были правильно рассчитаны (если они вообще хоть как-то рассчитались).

Поэтому мне ничего не оставалось как вернуться к моему старому способу и посмотреть как и где описывается, в частности
Код:
pHeadSelectedCity->
или нечто подобное и
Код:
calculateActualYieldProduced((YieldTypes)iI)
или нечто подобное.

Оказалось, что в CvCity.cpp вполне можно обойтись без pHeadSelectedCity->, что я незамедлительно и применил.

В итоге в патч были внесены небольшие изменения и сейчас эти участка кода выглядят так:
Код:
//		iUnproducedYield = pHeadSelectedCity->calculateActualYieldProduced((YieldTypes)iI) - pHeadSelectedCity->getBaseRawYieldProduced((YieldTypes)iI);		//KJ closed due to error 'pHeadSelectedCity' : undeclared identifier
		iUnproducedYield = calculateActualYieldProduced((YieldTypes)iI) - getBaseRawYieldProduced((YieldTypes)iI);	//KJ correction
и
Код:
//	aiProducedYields[iI] += pHeadSelectedCity->calculateNetYield((YieldTypes)iI);		//KJ closed due to error 'pHeadSelectedCity' : undeclared identifier
	aiProducedYields[iI] += calculateNetYield((YieldTypes)iI);							//KJ correction
В таком виде CvGameCoreDLL.dll компилируется без ошибок, мод запускается без проблем, а на городском экране все отражается правильно. По-видимому, так и должно быть.

Посмотри, пожалуйста, еще разок на этот участок кода:

CvCity.cpp:
Скрытый текст

Код:
//VET NewCapacity - begin 2/9
int CvCity::calculateTotalProducedYields() const
{

	int iI, iJ, iNumProfessionInfos, iUnproducedYield, iYieldConsumed, iProducedYield;
	int aiProducedYields[NUM_YIELD_TYPES];
	bool bBIRTH_POINTS;

	for (iI = 0; iI < NUM_YIELD_TYPES; iI++)
		{
		aiProducedYields[iI] = 0;
		}
	iNumProfessionInfos = GC.getNumProfessionInfos();
	for (iI = 0; iI < NUM_YIELD_TYPES; iI++)
	{
//		iUnproducedYield = pHeadSelectedCity->calculateActualYieldProduced((YieldTypes)iI) - pHeadSelectedCity->getBaseRawYieldProduced((YieldTypes)iI);		//KJ closed due to error 'pHeadSelectedCity' : undeclared identifier
		iUnproducedYield = calculateActualYieldProduced((YieldTypes)iI) - getBaseRawYieldProduced((YieldTypes)iI);	//KJ correction

		if (iUnproducedYield < 0)
		{
			for (iJ = 0; iJ < iNumProfessionInfos; iJ++)
			{
				CvProfessionInfo& kProfession = GC.getProfessionInfo((ProfessionTypes)iJ);
				if (kProfession.getYieldProduced() == iI)
				{
					iYieldConsumed = kProfession.getYieldConsumed();
					if (iYieldConsumed != NO_YIELD)
						{
						aiProducedYields[iYieldConsumed] += iUnproducedYield;
						}
				}
			}
		}
//	aiProducedYields[iI] += pHeadSelectedCity->calculateNetYield((YieldTypes)iI);		//KJ closed due to error 'pHeadSelectedCity' : undeclared identifier
	aiProducedYields[iI] += calculateNetYield((YieldTypes)iI);							//KJ correction
	}
	bBIRTH_POINTS = (GC.getBASE_BIRTH_POINTS_THRESHOLD() != 0);
	iProducedYield = 0;
	for (iI = 0; iI < NUM_YIELD_TYPES; iI++)
	{
		if ((bBIRTH_POINTS || (iI != YIELD_FOOD)) && GC.getYieldInfo((YieldTypes)iI).isCargo())
			{
			iProducedYield += aiProducedYields[iI];
			}
	}
	return iProducedYield;
}

Если такие изменения допустимы, то я выложу версию с патчем. Заранее большое спасибо.