Hooks
static bool BeforeCvPlayer_changeNumResourceTotal(CvPlayer* self, ResourceTypes eIndex, int iChange, bool bIgnoreResourceWarning);static void AfterCvPlayer_changeNumResourceTotal(CvPlayer* self, ResourceTypes eIndex, int iChange, bool bIgnoreResourceWarning);static void ReplaceCvPlayer_changeNumResourceTotal(void (*original)(CvPlayer*, ResourceTypes, int, bool), CvPlayer* self, ResourceTypes eIndex, int iChange, bool bIgnoreResourceWarning);CivRegisterBefore<CivHooks::CvPlayer_changeNumResourceTotal>(host, &BeforeCvPlayer_changeNumResourceTotal);CivRegisterAfter<CivHooks::CvPlayer_changeNumResourceTotal>(host, &AfterCvPlayer_changeNumResourceTotal);CivRegisterReplace<CivHooks::CvPlayer_changeNumResourceTotal>(host, &ReplaceCvPlayer_changeNumResourceTotal);
Code
19885void CvPlayer::changeNumResourceTotal(ResourceTypes eIndex, int iChange, bool bIgnoreResourceWarning)19886{19887 CvAssert(eIndex >= 0);19888 CvAssert(eIndex < GC.getNumResourceInfos());1988919890 if(iChange != 0)19891 {19892 m_paiNumResourceTotal.setAt(eIndex, m_paiNumResourceTotal[eIndex] + iChange);1989319894 // Minors with an Ally give their Resources to their friend (awww)19895 if(isMinorCiv())19896 {19897 PlayerTypes eBestRelationsPlayer = GetMinorCivAI()->GetAlly();1989819899 if(eBestRelationsPlayer != NO_PLAYER)19900 {19901 ResourceUsageTypes eUsage = GC.getResourceInfo(eIndex)->getResourceUsage();1990219903 if(eUsage == RESOURCEUSAGE_STRATEGIC || eUsage == RESOURCEUSAGE_LUXURY)19904 {19905 // Someone new is getting the bonus19906 if(eBestRelationsPlayer != NO_PLAYER)19907 {19908 GET_PLAYER(eBestRelationsPlayer).changeResourceFromMinors(eIndex, iChange);19909 changeResourceExport(eIndex, iChange);1991019911 CvNotifications* pNotifications = GET_PLAYER(eBestRelationsPlayer).GetNotifications();19912 if(pNotifications && !GetMinorCivAI()->IsDisableNotifications())19913 {19914 Localization::String strMessage;19915 Localization::String strSummary;1991619917 // Adding Resources19918 if(iChange > 0)19919 {19920 strMessage = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_BFF_NEW_RESOURCE");19921 strMessage << getNameKey() << GC.getResourceInfo(eIndex)->GetDescriptionKey();19922 strSummary = Localization::Lookup("TXT_KEY_NOTIFICATION_SUMMARY_MINOR_BFF_NEW_RESOURCE");19923 strSummary << getNameKey() << GC.getResourceInfo(eIndex)->GetDescriptionKey();19924 }19925 // Lost Resources19926 else19927 {19928 strMessage = Localization::Lookup("TXT_KEY_NOTIFICATION_MINOR_BFF_LOST_RESOURCE");19929 strMessage << getNameKey() << GC.getResourceInfo(eIndex)->GetDescriptionKey();19930 strSummary = Localization::Lookup("TXT_KEY_NOTIFICATION_SUMMARY_MINOR_BFF_LOST_RESOURCE");19931 strSummary << getNameKey() << GC.getResourceInfo(eIndex)->GetDescriptionKey();19932 }1993319934 int iX = -1;19935 int iY = -1;1993619937 CvCity* capCity = getCapitalCity();1993819939 if(capCity != NULL)19940 {19941 iX = capCity->getX();19942 iY = capCity->getY();19943 }1994419945 pNotifications->Add(NOTIFICATION_MINOR, strMessage.toUTF8(), strSummary.toUTF8(), iX, iY, -1);19946 }19947 }19948 }19949 }19950 }1995119952 // Any players siphoning resources from us need to be updated as well19953 for (int iPlayerLoop = 0; iPlayerLoop < MAX_PLAYERS; iPlayerLoop++)19954 {19955 GET_PLAYER((PlayerTypes)iPlayerLoop).UpdateResourcesSiphoned();19956 }19957 }1995819959 if(iChange < 0 && !bIgnoreResourceWarning)19960 DoTestOverResourceNotification(eIndex);1996119962 GC.GetEngineUserInterface()->setDirty(GameData_DIRTY_BIT, true);1996319964 CvAssert(m_paiNumResourceTotal[eIndex] >= 0);19965}