修改3.17的源码让他可在3.13上运行

教你把文明4 BTS 3.17的源码修改至3.13版以编译出3.13版可用的3.17版的DLL。
 
CvDLLInterfaceIFaceBase.h

// 3.13 不能使用
//virtual bool isDebugMenuCreated() const = 0;

==================================================================

CvDLLUtilityIFaceBase.h

// 3.13 不能使用
//virtual void enumerateModuleFiles(std::vector& aszFiles, const CvString& refcstrRootDirectory,		const CvString&		refcstrModularDirectory, const CvString& refcstrExtension, bool bSearchSubdirectories) = 0;

==================================================================
CvDLLButtonPopup.cpp

				else if (pPopupReturn->getButtonClicked() == 1)
				{
						// exit to main menu
						if (GC.getGameINLINE().isNetworkMultiPlayer() && GC.getGameINLINE().canDoControl(CONTROL_RETIRE) && GC.getGameINLINE().countHumanPlayersAlive() > 1)
						{
								GC.getGameINLINE().doControl(CONTROL_RETIRE);
						}
						// 下面是3.13的
						else
						{
								gDLL->getInterfaceIFace()->exitingToMainMenu();
						}
						// 下面是3.17的
						/*
						else if (!gDLL->getInterfaceIFace()->isDebugMenuCreated())
						{
								gDLL->getInterfaceIFace()->exitingToMainMenu();
						}
						else
						{
								gDLL->SetDone(true);
						}
						*/
				}

--------------------------------------------------------------------------------------------

	// 下面是3.13的
		gDLL->getInterfaceIFace()->popupAddGenericButton(pPopup, gDLL->getText("TXT_KEY_POPUP_EXIT_TO_MAIN_MENU").c_str(), NULL, 1, WIDGET_GENERAL, 1, 0, true, POPUP_LAYOUT_STRETCH, DLL_FONT_CENTER_JUSTIFY);

	/* 下面是3.17的
		if (!gDLL->getInterfaceIFace()->isDebugMenuCreated())
		{
				gDLL->getInterfaceIFace()->popupAddGenericButton(pPopup, gDLL->getText("TXT_KEY_POPUP_EXIT_TO_MAIN_MENU").c_str(), NULL, 1, WIDGET_GENERAL, 1, 0, true, POPUP_LAYOUT_STRETCH, DLL_FONT_CENTER_JUSTIFY);
		}
		*/
--------------------------------------------------------------------------------------------

		// 下面是3.13的
		gDLL->getInterfaceIFace()->popupAddGenericButton(pPopup, gDLL->getText("TXT_KEY_EXTENDED_GAME_NO_MENU"), NULL, 1, WIDGET_GENERAL);

		/* 下面是3.17的
		if (!gDLL->getInterfaceIFace()->isDebugMenuCreated())
		{
				gDLL->getInterfaceIFace()->popupAddGenericButton(pPopup, gDLL->getText("TXT_KEY_EXTENDED_GAME_NO_MENU"), NULL, 1, WIDGET_GENERAL);
		}
		else
		{
				gDLL->getInterfaceIFace()->popupAddGenericButton(pPopup, gDLL->getText("TXT_KEY_EXTENDED_GAME_NO_DESKTOP"), NULL, 1, WIDGET_GENERAL);
		}
		*/

==================================================================

CvInitCore.cpp

	// 下面是3.13的
	pStream->Read(NUM_GAMEOPTION_TYPES, m_abOptions);
	/* 下面是3.17的
		if (uiSaveFlag > 0)
		{
				pStream->Read(NUM_GAMEOPTION_TYPES, m_abOptions);
		}
		else
		{
				pStream->Read(NUM_GAMEOPTION_TYPES-1, m_abOptions);
				m_abOptions[NUM_GAMEOPTION_TYPES-1] = false;
		}
		*/

--------------------------------------------------------------------------------------------
void CvInitCore::write(FDataStreamBase* pStream)
{
	// 下面是3.13的
	uint uiSaveFlag=0;
	// 下面是3.17的
		//uint uiSaveFlag=1;

		pStream->Write(uiSaveFlag);				// flag for expansion, see SaveBits)

==================================================================

CvPlayer.h

		// 下面是3.17的,要加 const
		//DllExport bool canTradeItem(PlayerTypes eWhoTo, TradeData item, bool bTestDenial = false) const;						// Exposed to Python
		//DllExport DenialTypes getTradeDenial(PlayerTypes eWhoTo, TradeData item) const;																								// Exposed to Python
		// 下面是3.13的,不能有 const
		DllExport bool canTradeItem(PlayerTypes eWhoTo, TradeData item, bool bTestDenial = false);						// Exposed to Python
		DllExport DenialTypes getTradeDenial(PlayerTypes eWhoTo, TradeData item);

--------------------------------------------------------------------------------------------
	// 下面是3.17的,3.13不需要,删除或注释掉
		//DllExport void buildTradeTable(PlayerTypes eOtherPlayer, CLinkList& ourList) const;
		//DllExport bool getHeadingTradeString(PlayerTypes eOtherPlayer, TradeableItems eItem, CvWString& szString, CvString& szIcon) const;
		//DllExport bool getItemTradeString(PlayerTypes eOtherPlayer, bool bOffer, bool bShowingCurrent, const TradeData& zTradeData, CvWString& szString, CvString& szIcon) const;
		//DllExport void updateTradeList(PlayerTypes eOtherPlayer, CLinkList& ourInventory, const CLinkList& ourOffer, const CLinkList& theirOffer) const;

--------------------------------------------------------------------------------------------
		// 下面是3.17的,要加 const
		//virtual DenialTypes AI_bonusTrade(BonusTypes eBonus, PlayerTypes ePlayer) const = 0;
		// 下面是3.13的,不能有 const
		virtual DenialTypes AI_bonusTrade(BonusTypes eBonus, PlayerTypes ePlayer) = 0;

--------------------------------------------------------------------------------------------
		// 下面是3.17的,要加 const
		//virtual DenialTypes AI_cityTrade(CvCity* pCity, PlayerTypes ePlayer) const = 0;
		//virtual DenialTypes AI_stopTradingTrade(TeamTypes eTradeTeam, PlayerTypes ePlayer) const = 0;
		//virtual DenialTypes AI_civicTrade(CivicTypes eCivic, PlayerTypes ePlayer) const = 0;
		//virtual DenialTypes AI_religionTrade(ReligionTypes eReligion, PlayerTypes ePlayer) const = 0;
		// 下面是3.13的,不能有 const
		virtual DenialTypes AI_cityTrade(CvCity* pCity, PlayerTypes ePlayer) = 0;
		virtual DenialTypes AI_stopTradingTrade(TeamTypes eTradeTeam, PlayerTypes ePlayer) = 0;
		virtual DenialTypes AI_civicTrade(CivicTypes eCivic, PlayerTypes ePlayer) = 0;
		virtual DenialTypes AI_religionTrade(ReligionTypes eReligion, PlayerTypes ePlayer) = 0;

--------------------------------------------------------------------------------------------

		// 下面是3.17的,3.13不需要
		//virtual int AI_maxGoldPerTurnTrade(PlayerTypes ePlayer) const = 0;
		//virtual int AI_maxGoldTrade(PlayerTypes ePlayer) const = 0;

==================================================================

CvPlayer.cpp

3.13不需要下面这四个函数,删除或注释掉
buildTradeTable,getHeadingTradeString,getItemTradeString,updateTradeList

==================================================================

CvPlayerAI.h

	// 下面是3.17的,要加 const
		//DllExport int AI_maxGoldTrade(PlayerTypes ePlayer) const;
		//DllExport int AI_maxGoldPerTurnTrade(PlayerTypes ePlayer) const;
		// 下面是3.13的,不能有 const
		DllExport int AI_maxGoldTrade(PlayerTypes ePlayer);
		DllExport int AI_maxGoldPerTurnTrade(PlayerTypes ePlayer);

--------------------------------------------------------------------------------------------

		// 下面是3.17的,要加 const
		//DenialTypes AI_bonusTrade(BonusTypes eBonus, PlayerTypes ePlayer) const;
		//int AI_corporationBonusVal(BonusTypes eBonus) const;
		// 下面是3.13的,不能有 const
		DenialTypes AI_bonusTrade(BonusTypes eBonus, PlayerTypes ePlayer);
		int AI_corporationBonusVal(BonusTypes eBonus);

--------------------------------------------------------------------------------------------

		// 下面是3.17的,要加 const
		//DenialTypes AI_cityTrade(CvCity* pCity, PlayerTypes ePlayer) const;
		// 下面是3.13的,不能有 const
	DenialTypes AI_cityTrade(CvCity* pCity, PlayerTypes ePlayer);

--------------------------------------------------------------------------------------------
		// 下面是3.17的,要加 const
		//DenialTypes AI_stopTradingTrade(TeamTypes eTradeTeam, PlayerTypes ePlayer) const;
		// 下面是3.13的,不能有 const
		DenialTypes AI_stopTradingTrade(TeamTypes eTradeTeam, PlayerTypes ePlayer);

--------------------------------------------------------------------------------------------

		// 下面是3.17的,要加 const
		//DenialTypes AI_civicTrade(CivicTypes eCivic, PlayerTypes ePlayer) const;
		// 下面是3.13的,不能有 const
		DenialTypes AI_civicTrade(CivicTypes eCivic, PlayerTypes ePlayer);

--------------------------------------------------------------------------------------------
		// 下面是3.17的,要加 const
		//DenialTypes AI_religionTrade(ReligionTypes eReligion, PlayerTypes ePlayer) const;
		// 下面是3.13的,不能有 const
		DenialTypes AI_religionTrade(ReligionTypes eReligion, PlayerTypes ePlayer);

--------------------------------------------------------------------------------------------
	// 下面是3.17的,要加 const
		//int AI_getGoldTradedTo(PlayerTypes eIndex) const;
		// 下面是3.13的,不能有 const
		int AI_getGoldTradedTo(PlayerTypes eIndex);

==================================================================

CvPlayerAI.cpp

根据 CvPlayerAI.h 的定义,将对应的函数后尾的 const 去掉

==================================================================

CvXMLLoadUtility.h
CvXMLLoadUtilitySet.cpp

CvInfos.h
CvInfos.cpp

以上这四个文件必需使用3.13的结构,否则换语言会跳出。

自己根据操作量来判断是将其修改至3.13版结构,还是将增加的结构加到3.13版的文件上。

==================================================================

CyInfoInterface1.cpp

				.def("getButton", &CvInfoBase::getButton, "string ()")
				// 3.13版要加入下面这行
				.def("getXmlVal", &CvInfoBase::getXmlVal, "string ()")

--------------------------------------------------------------------------------------------

		// 3.13版用的是 pyGetQuote
				.def("getQuote", &CvTechInfo::pyGetQuote, "wstring ()")

==================================================================

CvPlayerAI.cpp

pDiplo->setDiploComment((DiploCommentTypes)GC.getInfoTypeForString("AI_DIPLOCOMMENT_CIVIC_PRESSURE"), GC.getCivicInfo(eFavoriteCivic).getTextKey());

// 3.17用的是 getTextKeyWide,3.13 的是getTextKey

至此完毕,再花4分钟来编译就可以在3.13上运行

《修改3.17的源码让他可在3.13上运行》有0个评分

★★★★★
★★★★
★★★
★★
0
0
0
0
0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注