Cybah
Emperor
- Joined
- Jun 22, 2007
- Messages
- 1,481
Cloning integers like iWorkerSpeedModifier to Trait Infos is easy, but ImprovementYieldChanges look highly complicated.
Here is what I got so far:
CvGameTextMgr.cpp:
CvInfos.cpp:
CvInfos.h:
CvPlayer.cpp:
CIV4CivilizationsSchema.xml:
I could compile the DLL, but I get multiple xml load errors like these:
Error loading/calling Civ4TraitInfos.xml
and
I guess it has something to do with my long part in CvInfos.cpp. This is 99% copied from another entry without any knowledge from me.
Can you help me on this? What's wrong/missing?
Here is what I got so far:
CvGameTextMgr.cpp:
PHP:
void CvGameTextMgr::parseTraits(CvWStringBuffer &szHelpString, TraitTypes eTrait, CivilizationTypes eCivilization, bool bDawnOfMan)
...
for (iI = 0; iI < NUM_YIELD_TYPES; ++iI)
{
for (iJ = 0; iJ < GC.getNumImprovementInfos(); iJ++)
{
if (GC.getTraitInfo(eTrait).getImprovementYieldChanges(iJ, iI) != 0)
{
szHelpString.append(gDLL->getText("TXT_KEY_CIVIC_IMPROVEMENT_YIELD_CHANGE", GC.getTraitInfo(eTrait).getImprovementYieldChanges(iJ, iI), GC.getYieldInfo((YieldTypes)iI).getChar()).c_str());
}
}
}
CvInfos.cpp:
PHP:
CvTraitInfo::CvTraitInfo() :
...
m_ppiImprovementYieldChanges(NULL),
PHP:
CvTraitInfo::~CvTraitInfo()
...
int CvTraitInfo::getImprovementYieldChanges(int i, int j) const
{
return m_ppiImprovementYieldChanges[i][j];
}
PHP:
bool CvTraitInfo::read(CvXMLLoadUtility* pXML)
...
int j;
int iNumSibs=0; // the number of siblings the current xml node has
int iIndex;
pXML->Init2DIntList(&m_ppiImprovementYieldChanges, GC.getNumImprovementInfos(), NUM_YIELD_TYPES);
if (gDLL->getXMLIFace()->SetToChildByTagName(pXML->GetXML(),"ImprovementYieldChanges"))
{
if (pXML->SkipToNextVal())
{
iNumSibs = gDLL->getXMLIFace()->GetNumChildren(pXML->GetXML());
if (gDLL->getXMLIFace()->SetToChild(pXML->GetXML()))
{
if (0 < iNumSibs)
{
for (j=0;j<iNumSibs;j++)
{
pXML->GetChildXmlValByName(szTextVal, "ImprovementType");
iIndex = pXML->FindInInfoClass(szTextVal);
if (iIndex > -1)
{
// delete the array since it will be reallocated
SAFE_DELETE_ARRAY(m_ppiImprovementYieldChanges[iIndex]);
// if we can set the current xml node to it's next sibling
if (gDLL->getXMLIFace()->SetToChildByTagName(pXML->GetXML(),"ImprovementYields"))
{
// call the function that sets the yield change variable
pXML->SetYields(&m_ppiImprovementYieldChanges[iIndex]);
gDLL->getXMLIFace()->SetToParent(pXML->GetXML());
}
else
{
pXML->InitList(&m_ppiImprovementYieldChanges[iIndex], NUM_YIELD_TYPES);
}
}
if (!gDLL->getXMLIFace()->NextSibling(pXML->GetXML()))
{
break;
}
}
}
gDLL->getXMLIFace()->SetToParent(pXML->GetXML());
}
}
gDLL->getXMLIFace()->SetToParent(pXML->GetXML());
}
CvInfos.h:
PHP:
class CvTraitInfo :
...
int getImprovementYieldChanges(int i, int j) const; // Exposed to Python
CvPlayer.cpp:
PHP:
void CvPlayer::init(PlayerTypes eID)
...
for (iI = 0; iI < GC.getNumImprovementInfos(); iI++)
{
for (iJ = 0; iJ < NUM_YIELD_TYPES; iJ++)
{
changeImprovementYieldChange(((ImprovementTypes)iI), ((YieldTypes)iJ), (GC.getTraitInfo((TraitTypes)iI).getImprovementYieldChanges(iI, iJ)));
}
}
CIV4CivilizationsSchema.xml:
PHP:
<ElementType name="ImprovementType" content="textOnly"/>
<ElementType name="ImprovementYields" content="eltOnly">
<element type="iYield" minOccurs="0" maxOccurs="*"/>
</ElementType>
<ElementType name="ImprovementYieldChange" content="eltOnly">
<element type="ImprovementType"/>
<element type="ImprovementYields"/>
</ElementType>
<ElementType name="ImprovementYieldChanges" content="eltOnly">
<element type="ImprovementYieldChange" minOccurs="0" maxOccurs="*"/>
</ElementType>
...
<ElementType name="TraitInfo" content="eltOnly">
...
<element type="ImprovementYieldChanges" minOccurs="0"/>
I could compile the DLL, but I get multiple xml load errors like these:
Error loading/calling Civ4TraitInfos.xml
and
I guess it has something to do with my long part in CvInfos.cpp. This is 99% copied from another entry without any knowledge from me.
Can you help me on this? What's wrong/missing?