Nach wieder einigen Stunden habe ich nun den Code für DCM komplett entfernt sowie die Unit nukebomber die nur mit der DCM dll funtioniert. Im Grunde habe ich nun BTS Next War mit umfangreichen XML/Artsyle Veränderungen vor mir.
Das besagte Problem mit den Crash to Desktop bleibt mir aber erhalten. Da ich jetzt ja keine GameCore im Mod benutze
habe ich mir die "Debug DLL for BTS 3.19" installiert. Mit dem Ergebnis das beim Laden der MoD eine Fehlermeldung 2x kommt.
Code:
Assert Failed
File: CvXMLLoadUtilitySet.cpp
Line: 1295
Expression: bSuccess
Message:
----------------------------------------------------------
Hab die Datei unter ..\Sid Meier's Civilization 4\Beyond the Sword\CvGameCoreDLL\CvXMLLoadUtilitySet.cpp gefunden.
Das ist die besagte Funktion darin:
Code:
/------------------------------------------------------------------------------------------------------
//
// FUNCTION: SetGlobalClassInfo - This is a template function that is USED FOR ALMOST ALL INFO CLASSES.
// Each info class should have a read(CvXMLLoadUtility*) function that is responsible for initializing
// the class from xml data.
//
// PURPOSE : takes the szTagName parameter and loads the ppszString with the text values
// under the tags. This will be the hints displayed during game initialization and load
//
//------------------------------------------------------------------------------------------------------
template <class T>
void CvXMLLoadUtility::SetGlobalClassInfo(std::vector<T*>& aInfos, const char* szTagName, bool bTwoPass)
{
char szLog[256];
sprintf(szLog, "SetGlobalClassInfo (%s)", szTagName);
PROFILE(szLog);
logMsg(szLog);
// if we successfully locate the tag name in the xml file
if (gDLL->getXMLIFace()->LocateNode(m_pFXml, szTagName))
{
// loop through each tag
do
{
SkipToNextVal(); // skip to the next non-comment node
T* pClassInfo = new T;
FAssert(NULL != pClassInfo);
if (NULL == pClassInfo)
{
break;
}
bool bSuccess = pClassInfo->read(this);
FAssert(bSuccess);
if (!bSuccess)
{
delete pClassInfo;
break;
}
int iIndex = -1;
if (NULL != pClassInfo->getType())
{
iIndex = GC.getInfoTypeForString(pClassInfo->getType(), true);
}
if (-1 == iIndex)
{
aInfos.push_back(pClassInfo);
if (NULL != pClassInfo->getType())
{
GC.setInfoTypeFromString(pClassInfo->getType(), (int)aInfos.size() - 1); // add type to global info type hash map
}
}
else
{
SAFE_DELETE(aInfos[iIndex]);
aInfos[iIndex] = pClassInfo;
}
} while (gDLL->getXMLIFace()->NextSibling(m_pFXml));
if (bTwoPass)
{
// if we successfully locate the szTagName node
if (gDLL->getXMLIFace()->LocateNode(m_pFXml, szTagName))
{
gDLL->getXMLIFace()->SetToParent(m_pFXml);
gDLL->getXMLIFace()->SetToChild(m_pFXml);
// loop through each tag
for (std::vector<T*>::iterator it = aInfos.begin(); it != aInfos.end(); ++it)
{
SkipToNextVal(); // skip to the next non-comment node
(*it)->readPass2(this);
if (!gDLL->getXMLIFace()->NextSibling(m_pFXml))
{
break;
}
}
}
}
}
}
Nun was zum Teufel ist das ?