Hooks
static bool BeforeCvCityCitizens_SetWorkingPlot(CvCityCitizens* self, CvPlot* pPlot, bool bNewValue, bool bUseUnassignedPool);static void AfterCvCityCitizens_SetWorkingPlot(CvCityCitizens* self, CvPlot* pPlot, bool bNewValue, bool bUseUnassignedPool);static void ReplaceCvCityCitizens_SetWorkingPlot(void (*original)(CvCityCitizens*, CvPlot*, bool, bool), CvCityCitizens* self, CvPlot* pPlot, bool bNewValue, bool bUseUnassignedPool);CivRegisterBefore<CivHooks::CvCityCitizens_SetWorkingPlot>(host, &BeforeCvCityCitizens_SetWorkingPlot);CivRegisterAfter<CivHooks::CvCityCitizens_SetWorkingPlot>(host, &AfterCvCityCitizens_SetWorkingPlot);CivRegisterReplace<CivHooks::CvCityCitizens_SetWorkingPlot>(host, &ReplaceCvCityCitizens_SetWorkingPlot);
Code
1637/// Tell a City to start or stop working a Plot. Citizens will go to/from the Unassigned Pool if the 3rd argument is true1638void CvCityCitizens::SetWorkingPlot(CvPlot* pPlot, bool bNewValue, bool bUseUnassignedPool)1639{1640 int iI;16411642 int iIndex = GetCityIndexFromPlot(pPlot);16431644 CvAssertMsg(iIndex >= 0, "iIndex expected to be >= 0");1645#if defined(MOD_GLOBAL_CITY_WORKING)1646 CvAssertMsg(iIndex < GetCity()->GetNumWorkablePlots(), "iIndex expected to be < NUM_CITY_PLOTS");16471648 if(IsWorkingPlot(pPlot) != bNewValue && iIndex >= 0 && iIndex < GetCity()->GetNumWorkablePlots())1649#else1650 CvAssertMsg(iIndex < NUM_CITY_PLOTS, "iIndex expected to be < NUM_CITY_PLOTS");16511652 if(IsWorkingPlot(pPlot) != bNewValue && iIndex >= 0 && iIndex < NUM_CITY_PLOTS)1653#endif1654 {1655 m_pabWorkingPlot[iIndex] = bNewValue;16561657 // Don't look at the center Plot of a City, because we always work it for free1658 if(iIndex != CITY_HOME_PLOT)1659 {1660 // Alter the count of Plots being worked by Citizens1661 if(bNewValue)1662 {1663 ChangeNumCitizensWorkingPlots(1);16641665 if(bUseUnassignedPool)1666 {1667 ChangeNumUnassignedCitizens(-1);1668 }1669 }1670 else1671 {1672 ChangeNumCitizensWorkingPlots(-1);16731674 if(bUseUnassignedPool)1675 {1676 ChangeNumUnassignedCitizens(1);1677 }1678 }1679 }16801681 if(pPlot != NULL)1682 {1683 // investigate later1684 //CvAssertMsg(pPlot->getWorkingCity() == GetCity(), "WorkingCity is expected to be this");16851686 // Now working pPlot1687 if(IsWorkingPlot(pPlot))1688 {1689 //if (iIndex != CITY_HOME_PLOT)1690 //{1691 // GetCity()->changeWorkingPopulation(1);1692 //}16931694 for(iI = 0; iI < NUM_YIELD_TYPES; iI++)1695 {1696 GetCity()->ChangeBaseYieldRateFromTerrain(((YieldTypes)iI), pPlot->getYield((YieldTypes)iI));1697 }1698 }1699 // No longer working pPlot1700 else1701 {1702 //if (iIndex != CITY_HOME_PLOT)1703 //{1704 // GetCity()->changeWorkingPopulation(-1);1705 //}17061707 for(iI = 0; iI < NUM_YIELD_TYPES; iI++)1708 {1709 GetCity()->ChangeBaseYieldRateFromTerrain(((YieldTypes)iI), -pPlot->getYield((YieldTypes)iI));1710 }1711 }1712 }17131714 if(GetCity()->isCitySelected())1715 {1716 GC.GetEngineUserInterface()->setDirty(CityInfo_DIRTY_BIT, true);1717 //GC.GetEngineUserInterface()->setDirty(InfoPane_DIRTY_BIT, true );1718 GC.GetEngineUserInterface()->setDirty(CityScreen_DIRTY_BIT, true);1719 GC.GetEngineUserInterface()->setDirty(ColoredPlots_DIRTY_BIT, true);1720 }17211722 GC.GetEngineUserInterface()->setDirty(CityInfo_DIRTY_BIT, true);1723 }1724}