Показано с 1 по 20 из 517

Тема: "1492: Global Colonization. Глобальная Колонизация"

Древовидный режим

  1. #11
    В файле CvEnums.h новые значения надо добавлять в конец списка перед значением обозначающим количество всех значений, название которого начинается на NUM_. В твоем случае WIDGET_HELP_WAREHOUSE надо добавлять после WIDGET_GOTO_CITY перед NUM_WIDGET_TYPES.
    Все дело в том что при кампиляции названия энумом заменяются на обычные числа начиная с нуля или того числа которое указано в самом первом энуме, причем число следующего энума на 1 больше предыдущего. Так вот, весь прикол в том что экзешник скомпилирован с теми значениями энумов которые установлены в оригинальном CvEnums.h, если ты добавляешь новый энум в середину списка, то все энумы после него становатся больше на 1. Но они становятся больше только в твоем DLL и питоне, а в экзешнике остаются старыми. В итоге при нажатии кнопки через пион передается число на 1 больше того что предусмотрено в экзешнике. Ну и естественно экзешник питается выполнить алгоритм, который не предусмотрен для выполнения с данными которые передаются при нажатии кнопки.

    В подсказку можно добавить прибавление ресурсов

    Код:
    void CvDLLWidgetData::parseWarehouseHelp(CvWidgetDataStruct &widgetDataStruct, CvWStringBuffer &szBuffer)
    {
    	if (GC.getNEW_CAPACITY() != 0)
    	{
    		CvCity* pHeadSelectedCity = gDLL->getInterfaceIFace()->getHeadSelectedCity();
    		if (pHeadSelectedCity != NULL)
    		{
    			int iI, iJ, iNumProfessionInfos, iUnproducedYield, iYieldConsumed, iProducedYield;
    			int aiProducedYields[NUM_YIELD_TYPES];
    			bool bBIRTH_POINTS = (GC.getBASE_BIRTH_POINTS_THRESHOLD() != 0);
    			iNumProfessionInfos = GC.getNumProfessionInfos();
    			for (iI = 0; iI < NUM_YIELD_TYPES; iI++)
    				{aiProducedYields[iI] = 0;}
    			for (iI = 0; iI < NUM_YIELD_TYPES; iI++)
    			{
    				iUnproducedYield = pHeadSelectedCity->calculateActualYieldProduced((YieldTypes)iI) - pHeadSelectedCity->getBaseRawYieldProduced((YieldTypes)iI);
    				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);
    			}
    			iProducedYield = 0;
    			for (iI = 0; iI < NUM_YIELD_TYPES; iI++)
    			{
    				if ((bBIRTH_POINTS || (iI != YIELD_FOOD)) && GC.getYieldInfo((YieldTypes)iI).isCargo())
    					{iProducedYield += aiProducedYields[iI];}
    			}
    
    			szBuffer.assign(gDLL->getText("TXT_KEY_MISC_WAREHOUSE", pHeadSelectedCity->getTotalYieldStored(), iProducedYield, pHeadSelectedCity->getMaxYieldCapacity()));
    		}
    	}
    }
    В подсказку TXT_KEY_MISC_WAREHOUSE надо добавить новую строчку отображающую прибавление или убавление ресурсов. Как в подсказке про очки рождаимости.
    продвинь это сообщение в соцсеть:  
    Последний раз редактировалось NeserVET; 22.09.2012 в 15:44.

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
Рейтинг@Mail.ru

free counters