原帖由 zweihander 于 2012-5-1 14:27 发表
你好。
我修改了一下CvUnit.cpp,编译了。很顺利,效果也实现了。但就是有一个问题,用了编译过的dll后,无法在游戏中自行输入中文的领袖名称、文明名称了,请问该问题如何解决?
请把日本发行商Cyberfront对dll代码的修改移植到你要编译的代码中. Cyberfont的源代码就位于sample_zh目录下.
比如CvInitCore.cpp
英文版某处是这样
- const CvWString & CvInitCore::getLeaderName(PlayerTypes eID, uint uiForm) const
- {
- FASSERT_BOUNDS(0, MAX_PLAYERS, eID, "CvInitCore::getLeaderName");
- if ( checkBounds(eID, 0, MAX_PLAYERS) )
- {
- m_szTemp = gDLL->getObjectText(CvString(m_aszLeaderName[eID]).GetCString(), uiForm, true);
- }
- else
- {
- m_szTemp = "";
- }
- return m_szTemp;
- }
复制代码
而汉化版使用的日文dll的代码则是
- const CvWString & CvInitCore::getLeaderName(PlayerTypes eID, uint uiForm) const
- {
- FASSERT_BOUNDS(0, MAX_PLAYERS, eID, "CvInitCore::getLeaderName");
- if ( checkBounds(eID, 0, MAX_PLAYERS) )
- {
- #ifdef CYBERFRONT // text: leader name
- m_szTemp = gDLL->getObjectText(m_aszLeaderName[eID], uiForm, true);
- #else
- m_szTemp = gDLL->getObjectText(CvString(m_aszLeaderName[eID]).GetCString(), uiForm, true);
- #endif // CYBERFRONT
- }
- else
- {
- m_szTemp = "";
- }
- return m_szTemp;
- }
复制代码
对于这个地方, 你就要像Cyberfront那样修改.
以上只是一个示例, 你还需改其它地方.
Cyberfront改过的文件如下:
CvDefines.h
CvDLLInterfaceIFaceBase.h
CvGameTextMgr.cpp
CvInitCore.cpp
CvString.h
CyInfoInterface1.cpp
Cyberfront所有的修正均用CYBERFRONT标出了, 除了CyInfoInterface1.cpp的改动.
同时它所有的改动你都需要移植, 除了CyInfoInterface1.cpp中对getEspionagePoints的改动.
Cyberfont在CyInfoInterface1.cpp删去了一行
- .def("getEspionagePoints", &CvUnitInfo::getEspionagePoints, "int ()")
复制代码
这个你需要保留. |