Hooks
static bool BeforeCvGameReligions_CheckSpawnGreatProphet(CvGameReligions* self, CvPlayer& kPlayer, bool& result);static void AfterCvGameReligions_CheckSpawnGreatProphet(CvGameReligions* self, CvPlayer& kPlayer, bool& result);static bool ReplaceCvGameReligions_CheckSpawnGreatProphet(bool (*original)(CvGameReligions*, CvPlayer&), CvGameReligions* self, CvPlayer& kPlayer);CivRegisterBefore<CivHooks::CvGameReligions_CheckSpawnGreatProphet>(host, &BeforeCvGameReligions_CheckSpawnGreatProphet);CivRegisterAfter<CivHooks::CvGameReligions_CheckSpawnGreatProphet>(host, &AfterCvGameReligions_CheckSpawnGreatProphet);CivRegisterReplace<CivHooks::CvGameReligions_CheckSpawnGreatProphet>(host, &ReplaceCvGameReligions_CheckSpawnGreatProphet);
Code
2617/// Time to spawn a Great Prophet?2618bool CvGameReligions::CheckSpawnGreatProphet(CvPlayer& kPlayer)2619{2620#if defined(MOD_BUGFIX_UNITCLASS_NOT_UNIT)2621 UnitTypes eUnit = kPlayer.GetSpecificUnitType("UNITCLASS_PROPHET", true);2622#else2623 UnitTypes eUnit = (UnitTypes)GC.getInfoTypeForString("UNIT_PROPHET", true);2624#endif2625 if (eUnit == NO_UNIT)2626 {2627 return false;2628 }26292630 const CvReligion* pReligion = NULL;2631 const int iFaith = kPlayer.GetFaith();2632#if defined(MOD_GLOBAL_TRULY_FREE_GP)2633 int iCost = kPlayer.GetReligions()->GetCostNextProphet(true /*bIncludeBeliefDiscounts*/, true /*bAdjustForSpeedDifficulty*/, MOD_GLOBAL_TRULY_FREE_GP);2634#else2635 int iCost = kPlayer.GetReligions()->GetCostNextProphet(true /*bIncludeBeliefDiscounts*/, true /*bAdjustForSpeedDifficulty*/);2636#endif26372638 ReligionTypes ePlayerReligion = GetReligionCreatedByPlayer(kPlayer.GetID());2639 if(ePlayerReligion > RELIGION_PANTHEON)2640 {2641 pReligion = GetReligion(ePlayerReligion, kPlayer.GetID());2642 }26432644 // If player hasn't founded a religion yet, drop out of this if all religions have been founded2645 else if(GetNumReligionsStillToFound() <= 0)2646 {2647 return false;2648 }26492650 if(iFaith < iCost)2651 {2652 return false;2653 }26542655#if defined(MOD_RELIGION_KEEP_PROPHET_OVERFLOW)2656 int iBaseChance = GC.getRELIGION_BASE_CHANCE_PROPHET_SPAWN();2657 int iChance = iBaseChance;2658#else2659 int iChance = GC.getRELIGION_BASE_CHANCE_PROPHET_SPAWN();2660#endif2661 iChance += (iFaith - iCost);26622663 int iRand = GC.getGame().getJonRandNum(100, "Religion: spawn Great Prophet roll.");2664 if(iRand >= iChance)2665 {2666 return false;2667 }26682669 CvCity* pSpawnCity = NULL;2670 if(pReligion)2671 {2672 pSpawnCity = GC.getMap().plot(pReligion->m_iHolyCityX, pReligion->m_iHolyCityY)->getPlotCity();2673 }26742675 if(pSpawnCity != NULL && pSpawnCity->getOwner() == kPlayer.GetID())2676 {2677#if defined(MOD_BUGFIX_MINOR)2678#if defined(MOD_GLOBAL_TRULY_FREE_GP)2679 pSpawnCity->GetCityCitizens()->DoSpawnGreatPerson(eUnit, true /*bIncrementCount*/, true, false);2680#else2681 pSpawnCity->GetCityCitizens()->DoSpawnGreatPerson(eUnit, true /*bIncrementCount*/, true);2682#endif2683#else2684#if defined(MOD_GLOBAL_TRULY_FREE_GP)2685 pSpawnCity->GetCityCitizens()->DoSpawnGreatPerson(eUnit, false /*bIncrementCount*/, true, false);2686#else2687 pSpawnCity->GetCityCitizens()->DoSpawnGreatPerson(eUnit, false /*bIncrementCount*/, true);2688#endif2689#endif2690#if defined(MOD_RELIGION_KEEP_PROPHET_OVERFLOW)2691 if (MOD_RELIGION_KEEP_PROPHET_OVERFLOW && iBaseChance >= 100) {2692 kPlayer.ChangeFaith(-1 * iCost);2693 } else {2694#endif2695 kPlayer.SetFaith(0);2696#if defined(MOD_RELIGION_KEEP_PROPHET_OVERFLOW)2697 }2698#endif2699 }2700 else2701 {2702 pSpawnCity = kPlayer.getCapitalCity();2703 if(pSpawnCity != NULL)2704 {2705#if defined(MOD_BUGFIX_MINOR)2706#if defined(MOD_GLOBAL_TRULY_FREE_GP)2707 pSpawnCity->GetCityCitizens()->DoSpawnGreatPerson(eUnit, true /*bIncrementCount*/, true, false);2708#else2709 pSpawnCity->GetCityCitizens()->DoSpawnGreatPerson(eUnit, true /*bIncrementCount*/, true);2710#endif2711#else2712#if defined(MOD_GLOBAL_TRULY_FREE_GP)2713 pSpawnCity->GetCityCitizens()->DoSpawnGreatPerson(eUnit, false /*bIncrementCount*/, true, false);2714#else2715 pSpawnCity->GetCityCitizens()->DoSpawnGreatPerson(eUnit, false /*bIncrementCount*/, true);2716#endif2717#endif2718#if defined(MOD_RELIGION_KEEP_PROPHET_OVERFLOW)2719 if (MOD_RELIGION_KEEP_PROPHET_OVERFLOW && iBaseChance >= 100) {2720 kPlayer.ChangeFaith(-1 * iCost);2721 } else {2722#endif2723 kPlayer.SetFaith(0);2724#if defined(MOD_RELIGION_KEEP_PROPHET_OVERFLOW)2725 }2726#endif2727 }2728 }27292730 // Logging2731 if(GC.getLogging() && pSpawnCity)2732 {2733 CvString strLogMsg;2734 strLogMsg = kPlayer.getCivilizationShortDescription();2735 strLogMsg += ", PROPHET SPAWNED, ";2736 strLogMsg += pSpawnCity->getName();2737 strLogMsg += ", Faith: 0";2738 LogReligionMessage(strLogMsg);2739 }27402741 return true;2742}