Skip to content

Commit

Permalink
Moved getLearningByDoingModifier from CvTraitInfo to CivEffectInfo
Browse files Browse the repository at this point in the history
This allows this modifier to be used in any CivEffect granting xml file.
Also the CivEffect cache is applied, avoiding the need to loop trait infos.
  • Loading branch information
Nightinggale committed Jan 3, 2022
1 parent 815beea commit d3e5f01
Show file tree
Hide file tree
Showing 13 changed files with 93 additions and 169 deletions.
24 changes: 24 additions & 0 deletions Assets/XML/CivEffects/CIV4CivEffectsInfos.xml
Expand Up @@ -117,5 +117,29 @@
</AllowRoute>
</AllowRoutes>
</TagGroupAllow>
</CivEffectInfo>
<CivEffectInfo>
<Type>CIV_EFFECT_TRAIT_SOPHISTICATED</Type>
<TagGroupGrowth>
<iLearningByDoingModifier>50</iLearningByDoingModifier>
</TagGroupGrowth>
</CivEffectInfo>
<CivEffectInfo>
<Type>CIV_EFFECT_TRAIT_PIONEER</Type>
<TagGroupGrowth>
<iLearningByDoingModifier>10</iLearningByDoingModifier>
</TagGroupGrowth>
</CivEffectInfo>
<CivEffectInfo>
<Type>CIV_EFFECT_TRAIT_SEAFARERS</Type>
<TagGroupGrowth>
<iLearningByDoingModifier>10</iLearningByDoingModifier>
</TagGroupGrowth>
</CivEffectInfo>
<CivEffectInfo>
<Type>CIV_EFFECT_TRAIT_INDUSTRIOUS</Type>
<TagGroupGrowth>
<iLearningByDoingModifier>10</iLearningByDoingModifier>
</TagGroupGrowth>
</CivEffectInfo>
</Civ4CivEffectInfos>
2 changes: 2 additions & 0 deletions Assets/XML/CivEffects/CIV4CivEffectsInfosSchema.xml
Expand Up @@ -18,6 +18,7 @@
<ElementType name="iAllow" content="textOnly" dt:type="int" />
<ElementType name="iAllowFoundCity" content="textOnly" dt:type="int" />
<ElementType name="iCanUseDomesticMarket" content="textOnly" dt:type="int" />
<ElementType name="iLearningByDoingModifier" content="textOnly" dt:type="int"/>
<ElementType name="iNumUnitsOnDockChange" content="textOnly" dt:type="int" />


Expand Down Expand Up @@ -130,6 +131,7 @@
</ElementType>

<ElementType name="TagGroupGrowth" content="eltOnly">
<element type="iLearningByDoingModifier" minOccurs="0" />
<element type="iNumUnitsOnDockChange" minOccurs="0" />
</ElementType>

Expand Down
2 changes: 0 additions & 2 deletions Assets/XML/Civilizations/CIV4CivilizationsSchema.xml
Expand Up @@ -350,7 +350,6 @@
<ElementType name="iCultureLevelModifier" content="textOnly" dt:type="int"/>
<ElementType name="iPioneerSpeedModifier" content="textOnly" dt:type="int"/>
<ElementType name="iImprovementPriceModifier" content="textOnly" dt:type="int"/>
<ElementType name="iLearningByDoingModifier" content="textOnly" dt:type="int"/>
<ElementType name="iSpecialistPriceModifier" content="textOnly" dt:type="int"/>
<ElementType name="iStorageCapacityModifier" content="textOnly" dt:type="int"/>
<ElementType name="GoodyType" content="textOnly"/>
Expand Down Expand Up @@ -395,7 +394,6 @@
<element type="iCultureLevelModifier"/>
<element type="iPioneerSpeedModifier"/>
<element type="iImprovementPriceModifier"/>
<element type="iLearningByDoingModifier"/>
<element type="iSpecialistPriceModifier"/>
<element type="iStorageCapacityModifier"/>
<element type="CityExtraYields"/>
Expand Down
123 changes: 4 additions & 119 deletions Assets/XML/Civilizations/CIV4TraitInfos.xml

Large diffs are not rendered by default.

14 changes: 2 additions & 12 deletions Project Files/DLLSources/CvCity.cpp
Expand Up @@ -11169,18 +11169,8 @@ bool CvCity::LbD_try_become_expert(CvUnit* convUnit, int base, int increase, int
calculatedChance = calculatedChance * ki_modifier / 100;
}

for (int iTrait = 0; iTrait < GC.getNumTraitInfos(); ++iTrait)
{
TraitTypes eTrait = (TraitTypes) iTrait;
if (eTrait != NO_TRAIT)
{
if (hasTrait(eTrait))
{
calculatedChance *= GC.getTraitInfo(eTrait).getLearningByDoingModifier() + 100;
calculatedChance /= 100;
}
}
}
calculatedChance *= GET_PLAYER(getOwnerINLINE()).getLearningByDoingModifier() / 100; // CivEffects - Nightinggale

//agnat86, added LbD modifier for Sophisticated Trait
//ray Multiplayer Random Fix
//int randomValue = rand() % 1000 + 1;
Expand Down
40 changes: 30 additions & 10 deletions Project Files/DLLSources/CvGameTextMgr.cpp
Expand Up @@ -3882,16 +3882,6 @@ void CvGameTextMgr::parseTraits(CvWStringBuffer &szHelpString, TraitTypes eTrait
szHelpString.append(gDLL->getText("TXT_KEY_FATHER_IMPROVEMENT_PRICE_MODIFIER", kTrait.getImprovementPriceModifier()));
}

if (kTrait.getLearningByDoingModifier() != 0)
{
szHelpString.append(NEWLINE);
if (bIndent)
{
szHelpString.append(L" ");
}
szHelpString.append(gDLL->getText("TXT_KEY_FATHER_LEARNING_BY_DOING_MODIFIER", kTrait.getLearningByDoingModifier()));
}

if (kTrait.getSpecialistPriceModifier() != 0)
{
szHelpString.append(NEWLINE);
Expand Down Expand Up @@ -3935,6 +3925,9 @@ void CvGameTextMgr::parseTraits(CvWStringBuffer &szHelpString, TraitTypes eTrait
}
}
}
// CivEffects - Nightinggale - start
parseCivEffects(szHelpString, kTrait.getCivEffect(), eCivilization, bDawnOfMan, bIndent);
// CivEffects - Nightinggale - end
}

void CvGameTextMgr::parseLeaderTraits(CvWStringBuffer &szHelpString, LeaderHeadTypes eLeader, CivilizationTypes eCivilization, bool bDawnOfMan, bool bCivilopediaText)
Expand Down Expand Up @@ -9207,6 +9200,33 @@ void CvGameTextMgr::setFatherHelp(CvWStringBuffer &szBuffer, FatherTypes eFather
}
}

// CivEffects - Nightinggale - start
void CvGameTextMgr::parseCivEffects(CvWStringBuffer &szHelpString, CivEffectTypes eCivEffect, CivilizationTypes eCivilization, bool bDawnOfMan, bool bIndent)
{
if (eCivEffect == NO_CIV_EFFECT)
{
return;
}

CvWString szTempBuffer;

const CivEffectInfo& kEffect = GC.getCivEffectInfo(eCivEffect);

if (!bDawnOfMan)
{
if (kEffect.getLearningByDoingModifier() != 0)
{
szHelpString.append(NEWLINE);
if (bIndent)
{
szHelpString.append(L" ");
}
szHelpString.append(gDLL->getText("TXT_KEY_FATHER_LEARNING_BY_DOING_MODIFIER", kEffect.getLearningByDoingModifier()));
}
}
}
// CivEffects - Nightinggale - end

void CvGameTextMgr::getTradeScreenTitleIcon(CvString& szButton, CvWidgetDataStruct& widgetData, PlayerTypes ePlayer)
{
szButton = GC.getCivilizationInfo(GET_PLAYER(ePlayer).getCivilizationType()).getButton();
Expand Down
3 changes: 3 additions & 0 deletions Project Files/DLLSources/CvGameTextMgr.h
Expand Up @@ -76,6 +76,9 @@ class CvGameTextMgr
DllExport void parseLeaderHeadHelp(CvWStringBuffer &szBuffer, PlayerTypes eThisPlayer, PlayerTypes eOtherPlayer);
DllExport void parseLeaderLineHelp(CvWStringBuffer &szBuffer, PlayerTypes eThisPlayer, PlayerTypes eOtherPlayer);
DllExport void parseGreatGeneralHelp(CvWStringBuffer &szBuffer, CvPlayer& kPlayer);
// CivEffects - Nightinggale - start
void parseCivEffects(CvWStringBuffer &szHelpString, CivEffectTypes eCivEffect, CivilizationTypes eCivilization = NO_CIVILIZATION, bool bDawnOfMan = false, bool bIndent = true);
// CivEffects - Nightinggale - end
DllExport void setBasicUnitHelp(CvWStringBuffer &szBuffer, UnitTypes eUnit, bool bCivilopediaText = false);
DllExport void setUnitHelp(CvWStringBuffer &szBuffer, UnitTypes eUnit, bool bCivilopediaText = false, bool bStrategyText = false, CvCity* pCity = NULL);
DllExport void setProfessionHelp(CvWStringBuffer &szBuffer, ProfessionTypes eProfession, bool bCivilopediaText = false, bool bStrategyText = false);
Expand Down
19 changes: 9 additions & 10 deletions Project Files/DLLSources/CvInfos.cpp
Expand Up @@ -10885,7 +10885,6 @@ CvTraitInfo::CvTraitInfo() :
m_iCultureLevelModifier(0),
m_iPioneerSpeedModifier(0),
m_iImprovementPriceModifier(0),
m_iLearningByDoingModifier(0),
m_iSpecialistPriceModifier(0),
m_iStorageCapacityModifier(0), // Schmiddie, 7 new variables for traits for Europeans, END
m_aiYieldModifier(NULL),
Expand Down Expand Up @@ -11054,11 +11053,6 @@ int CvTraitInfo::getImprovementPriceModifier() const
return m_iImprovementPriceModifier;
}

int CvTraitInfo::getLearningByDoingModifier() const
{
return m_iLearningByDoingModifier;
}

int CvTraitInfo::getSpecialistPriceModifier() const
{
return m_iSpecialistPriceModifier;
Expand Down Expand Up @@ -11204,7 +11198,6 @@ void CvTraitInfo::read(FDataStreamBase* stream)
stream->Read(&m_iCultureLevelModifier);
stream->Read(&m_iPioneerSpeedModifier);
stream->Read(&m_iImprovementPriceModifier);
stream->Read(&m_iLearningByDoingModifier);
stream->Read(&m_iSpecialistPriceModifier);
stream->Read(&m_iStorageCapacityModifier); // Schmiddie, 7 new variables for traits for Europeans, END
stream->ReadString(m_szShortDescription);
Expand Down Expand Up @@ -11312,7 +11305,6 @@ void CvTraitInfo::write(FDataStreamBase* stream)
stream->Write(m_iCultureLevelModifier);
stream->Write(m_iPioneerSpeedModifier);
stream->Write(m_iImprovementPriceModifier);
stream->Write(m_iLearningByDoingModifier);
stream->Write(m_iSpecialistPriceModifier);
stream->Write(m_iStorageCapacityModifier); // Schmiddie, 7 new variables for traits for Europeans, END
stream->WriteString(m_szShortDescription);
Expand Down Expand Up @@ -11376,7 +11368,6 @@ bool CvTraitInfo::read(CvXMLLoadUtility* pXML)
pXML->GetChildXmlValByName(&m_iCultureLevelModifier, "iCultureLevelModifier");
pXML->GetChildXmlValByName(&m_iPioneerSpeedModifier, "iPioneerSpeedModifier");
pXML->GetChildXmlValByName(&m_iImprovementPriceModifier, "iImprovementPriceModifier");
pXML->GetChildXmlValByName(&m_iLearningByDoingModifier, "iLearningByDoingModifier");
pXML->GetChildXmlValByName(&m_iSpecialistPriceModifier, "iSpecialistPriceModifier");
pXML->GetChildXmlValByName(&m_iStorageCapacityModifier, "iStorageCapacityModifier"); // Schmiddie, 7 new variables for traits for Europeans, END

Expand Down Expand Up @@ -16388,6 +16379,10 @@ bool CvTradeScreenInfo::read(CvXMLLoadUtility* pXML)
///
/// CivEffect
///
int CivEffectInfo::getLearningByDoingModifier() const
{
return m_iLearningByDoingModifier;
}

CivEffectInfo::CivEffectInfo(bool bAutogenerateAllow)
// allow
Expand All @@ -16397,6 +16392,9 @@ CivEffectInfo::CivEffectInfo(bool bAutogenerateAllow)

// growth
, m_iNumUnitsOnDockChange(0)

// unit
, m_iLearningByDoingModifier(0)
{
if (bAutogenerateAllow)
{
Expand Down Expand Up @@ -16492,7 +16490,8 @@ bool CivEffectInfo::read(CvXMLLoadUtility* pXML)

if (gDLL->getXMLIFace()->SetToChildByTagName(pXML->GetXML(), "TagGroupGrowth"))
{
pXML->GetChildXmlValByName(&m_iNumUnitsOnDockChange, "iNumUnitsOnDockChange");
pXML->GetChildXmlValByName(&m_iLearningByDoingModifier , "iLearningByDoingModifier" );
pXML->GetChildXmlValByName(&m_iNumUnitsOnDockChange , "iNumUnitsOnDockChange" );

gDLL->getXMLIFace()->SetToParent(pXML->GetXML());
}
Expand Down
4 changes: 2 additions & 2 deletions Project Files/DLLSources/CvInfos.h
Expand Up @@ -3172,7 +3172,6 @@ class CvTraitInfo :
int getCultureLevelModifier() const;
int getPioneerSpeedModifier() const;
int getImprovementPriceModifier() const;
int getLearningByDoingModifier() const;
int getSpecialistPriceModifier() const;
int getStorageCapacityModifier() const; // Schmiddie, 7 new variables for traits for Europeans, END

Expand Down Expand Up @@ -3232,7 +3231,6 @@ class CvTraitInfo :
int m_iCultureLevelModifier;
int m_iPioneerSpeedModifier;
int m_iImprovementPriceModifier;
int m_iLearningByDoingModifier;
int m_iSpecialistPriceModifier;
int m_iStorageCapacityModifier; // Schmiddie, 7 new variables for traits for Europeans, END

Expand Down Expand Up @@ -4846,6 +4844,7 @@ class CivEffectInfo :
inline int getCanUseDomesticMarket () const { return m_iCanUseDomesticMarket ; }

// growth
int getLearningByDoingModifier () const;
inline int getNumUnitsOnDockChange () const { return m_iNumUnitsOnDockChange ; }

// unit
Expand Down Expand Up @@ -4876,6 +4875,7 @@ class CivEffectInfo :
int m_iCanUseDomesticMarket;

// growth
int m_iLearningByDoingModifier;
int m_iNumUnitsOnDockChange;

// unit
Expand Down
14 changes: 2 additions & 12 deletions Project Files/DLLSources/CvPlayer.cpp
Expand Up @@ -19478,18 +19478,8 @@ bool CvPlayer::LbD_try_become_expert(CvUnit* convUnit, int base, int increase, i
calculatedChance = calculatedChance * ki_modifier / 100;
}

for (int iTrait = 0; iTrait < GC.getNumTraitInfos(); ++iTrait)
{
TraitTypes eTrait = (TraitTypes) iTrait;
if (eTrait != NO_TRAIT)
{
if (hasTrait(eTrait))
{
calculatedChance *= GC.getTraitInfo(eTrait).getLearningByDoingModifier() + 100;
calculatedChance /= 100;
}
}
}
calculatedChance *= CivEffect()->getLearningByDoingModifier() / 100; // CivEffects - Nightinggale

//Schmiddie, added LbD modifier for Sophisticated Trait ENDE

//ray Multiplayer Random Fix
Expand Down
13 changes: 12 additions & 1 deletion Project Files/DLLSources/CvPlayerCivEffect.cpp
Expand Up @@ -44,7 +44,9 @@ void CvPlayerCivEffect::applyCivEffect(const CivEffectInfo& kCivEffect, int iCha
m_iAllowFoundCity += iChange * kCivEffect.getAllowFoundCity();
m_iCacheCanUseDomesticMarket += iChange * kCivEffect.getCanUseDomesticMarket();

m_iCacheNumUnitsOnDock += iChange * kCivEffect.getNumUnitsOnDockChange();
// growth
m_iCacheLearningByDoingModifier += iChange * kCivEffect.getLearningByDoingModifier ();
m_iCacheNumUnitsOnDock += iChange * kCivEffect.getNumUnitsOnDockChange ();


bUpdatePromotions |= m_ja_iCacheFreePromotions .addCache(iChange, kCivEffect.getFreePromotions (), pCivInfo);
Expand Down Expand Up @@ -146,6 +148,8 @@ void CvPlayerCivEffect::resetCivEffectCache()

m_iCacheCanUseDomesticMarket = 0;

// growth
m_iCacheLearningByDoingModifier = 100;
m_iCacheNumUnitsOnDock = 0;

m_ja_iCacheFreePromotions.reset();
Expand Down Expand Up @@ -280,3 +284,10 @@ void CvPlayerCivEffect::updateHasCivEffectCache() const
}
BOOST_STATIC_ASSERT(NUM_CIV_CATEGORY_TYPES == 6);
}

// growth
int CvPlayerCivEffect::getLearningByDoingModifier() const
{
// cap chance at 0% to avoid calculations using negative chances
return m_iCacheLearningByDoingModifier > 0 ? m_iCacheLearningByDoingModifier : 0;
}
3 changes: 3 additions & 0 deletions Project Files/DLLSources/CvPlayerCivEffect.h
Expand Up @@ -36,6 +36,8 @@ class CvPlayerCivEffect : public CvPlayer

inline bool canUseDomesticMarket() const { return m_iCacheCanUseDomesticMarket > 0; }

// growth
int getLearningByDoingModifier() const;
inline unsigned int getNumUnitsOnDock() const { return m_iCacheNumUnitsOnDock > 0 ? m_iCacheNumUnitsOnDock : 1; } // return 0 or negative crashes the game


Expand Down Expand Up @@ -70,6 +72,7 @@ class CvPlayerCivEffect : public CvPlayer
int m_iCacheCanUseDomesticMarket;

// Growth
int m_iCacheLearningByDoingModifier;
int m_iCacheNumUnitsOnDock;

// Units
Expand Down
1 change: 0 additions & 1 deletion Project Files/DLLSources/CyInfoInterface3.cpp
Expand Up @@ -176,7 +176,6 @@ void CyInfoPythonInterface3()
.def("getCultureLevelModifier", &CvTraitInfo::getCultureLevelModifier, "int ()")
.def("getPioneerSpeedModifier", &CvTraitInfo::getPioneerSpeedModifier, "int ()")
.def("getImprovementPriceModifier", &CvTraitInfo::getImprovementPriceModifier, "int ()")
.def("getLearningByDoingModifier", &CvTraitInfo::getLearningByDoingModifier, "int ()")
.def("getSpecialistPriceModifier", &CvTraitInfo::getSpecialistPriceModifier, "int ()")
.def("getStorageCapacityModifier", &CvTraitInfo::getStorageCapacityModifier, "int ()") // Schmiddie, 7 new variables for traits for Europeans, END
.def("getYieldModifier", &CvTraitInfo::getYieldModifier, "int (int)")
Expand Down

0 comments on commit d3e5f01

Please sign in to comment.