CyRandom gibt's bei mir nicht. CvRandom.get() ist die Funktion die ich oben zitiert hab. Der Aufruf ist:
Code:
iRand = gc.getGame().getSorenRandNum(20, "Chance of City revolt")
->
Code:
int CyGame::getSorenRandNum(int iNum, TCHAR* pszLog)
{
return m_pGame ? m_pGame->getSorenRandNum(iNum, pszLog) : -1;
}
->
Code:
int CvGame::getSorenRandNum(int iNum, const char* pszLog)
{
return m_sorenRand.get(iNum, pszLog);
}
->
Code:
unsigned short CvRandom::get(unsigned short usNum, const TCHAR* pszLog)
{
if (pszLog != NULL)
{
if (GC.getLogging() && GC.getRandLogging())
{
if (GC.getGameINLINE().getTurnSlice() > 0)
{
TCHAR szOut[1024];
sprintf(szOut, "Rand = %d on %d (%s)\n", getSeed(), GC.getGameINLINE().getTurnSlice(), pszLog);
gDLL->messageControlLog(szOut);
}
}
}
m_ulRandomSeed = ((RANDOM_A * m_ulRandomSeed) + RANDOM_C);
unsigned short us = ((unsigned short)((((m_ulRandomSeed >> RANDOM_SHIFT) & MAX_UNSIGNED_SHORT) * ((unsigned long)usNum)) / (MAX_UNSIGNED_SHORT + 1)));
return us;
}
€: Der Fehler tritt ja nicht auf, wenn der String NULL ist. Also muss die Ursache im Debug-Block von CvRandom::get() liegen.
€²: GC.getLogging() sollte immer FALSE sein, für alle Vorkommen von Logging, getLogging etc. siehe Anhang.