Bazaar developer reference

CvLeague::DoProjectReward(PlayerTypes, LeagueProjectTypes, ContributionTier)

Defined in
CvVotingClasses.cpp, line 6210
Class
CvLeague
Hook name
CivHooks::CvLeague_DoProjectReward

Hooks

static bool BeforeCvLeague_DoProjectReward(CvLeague* self, PlayerTypes ePlayer, LeagueProjectTypes eLeagueProject, CvLeague::ContributionTier eTier);static void AfterCvLeague_DoProjectReward(CvLeague* self, PlayerTypes ePlayer, LeagueProjectTypes eLeagueProject, CvLeague::ContributionTier eTier);static void ReplaceCvLeague_DoProjectReward(void (*original)(CvLeague*, PlayerTypes, LeagueProjectTypes, CvLeague::ContributionTier), CvLeague* self, PlayerTypes ePlayer, LeagueProjectTypes eLeagueProject, CvLeague::ContributionTier eTier);CivRegisterBefore<CivHooks::CvLeague_DoProjectReward>(host, &BeforeCvLeague_DoProjectReward);CivRegisterAfter<CivHooks::CvLeague_DoProjectReward>(host, &AfterCvLeague_DoProjectReward);CivRegisterReplace<CivHooks::CvLeague_DoProjectReward>(host, &ReplaceCvLeague_DoProjectReward);

Code

6210void CvLeague::DoProjectReward(PlayerTypes ePlayer, LeagueProjectTypes eLeagueProject, ContributionTier eTier)6211{6212	CvLeagueProjectEntry* pProjectInfo = GC.getLeagueProjectInfo(eLeagueProject);6213	CvAssert(pProjectInfo);6214	if (!pProjectInfo) return;6215	6216	// Which rewards do we get?6217	//antonjs: A switch statement in its natural habitat without break statements...a rare sight indeed6218	FStaticVector<LeagueProjectRewardTypes, NUM_CONTRIBUTION_TIERS, true, c_eCiv5GameplayDLL> veRewards;6219	switch (eTier)6220	{6221	case CONTRIBUTION_TIER_3:6222		{6223			veRewards.push_back(pProjectInfo->GetRewardTier3());6224		}6225	case CONTRIBUTION_TIER_2:6226		{6227			veRewards.push_back(pProjectInfo->GetRewardTier2());6228		}6229	case CONTRIBUTION_TIER_1:6230		{6231			veRewards.push_back(pProjectInfo->GetRewardTier1());6232		}6233	default:6234		{6235			break;6236		}6237	}62386239	for (uint i = 0; i < veRewards.size(); i++)6240	{6241		CvLeagueProjectRewardEntry* pRewardInfo = GC.getLeagueProjectRewardInfo(veRewards[i]);6242		CvAssert(pRewardInfo);6243		if (!pRewardInfo) continue;62446245		// Free Building in Capital6246		if (pRewardInfo->GetBuilding() != NO_BUILDING)6247		{6248			CvCity* pCapital = GET_PLAYER(ePlayer).getCapitalCity();6249			CvAssertMsg(pCapital, "Player does not have a capital city. Please send Anton your save file and version.");6250			if (pCapital)6251			{6252				CvBuildingEntry* pBuildingInfo = GC.getBuildingInfo(pRewardInfo->GetBuilding());6253				if (pBuildingInfo)6254				{6255					pCapital->CreateBuilding(pRewardInfo->GetBuilding());6256					pCapital->CleanUpQueue(); // cleans out items from the queue that may be invalidated by the recent construction6257				}6258			}6259		}62606261		// Happiness6262		if (pRewardInfo->GetHappiness() != 0)6263		{6264			GET_PLAYER(ePlayer).ChangeHappinessFromLeagues(pRewardInfo->GetHappiness());6265			GET_PLAYER(ePlayer).DoUpdateHappiness();6266		}62676268		// Free Social Policy6269		if (pRewardInfo->GetFreeSocialPolicies() > 0)6270		{6271			GET_PLAYER(ePlayer).ChangeNumFreePolicies(pRewardInfo->GetFreeSocialPolicies());6272		}62736274		// Temporary Culture Modifier6275		if (pRewardInfo->GetCultureBonusTurns() > 0)6276		{6277			GET_PLAYER(ePlayer).ChangeCultureBonusTurns(pRewardInfo->GetCultureBonusTurns());6278		}62796280		// Temporary Tourism Modifier6281		if (pRewardInfo->GetTourismBonusTurns() > 0)6282		{6283			GET_PLAYER(ePlayer).ChangeTourismBonusTurns(pRewardInfo->GetTourismBonusTurns());6284		}62856286		// Golden Age Points6287		if (pRewardInfo->GetGoldenAgePoints() > 0)6288		{6289			GET_PLAYER(ePlayer).ChangeGoldenAgeProgressMeter(pRewardInfo->GetGoldenAgePoints());6290		}62916292		// City-State Influence Boost6293		//antonjs: todo: ordering, to prevent ally / no longer ally notif spam6294		if (pRewardInfo->GetCityStateInfluenceBoost() > 0)6295		{6296			for (int iMinorCivLoop = MAX_MAJOR_CIVS; iMinorCivLoop < MAX_CIV_PLAYERS; iMinorCivLoop++)6297			{6298				PlayerTypes eMinorCivLoop = (PlayerTypes) iMinorCivLoop;6299				if (GET_PLAYER(eMinorCivLoop).isAlive() && GET_TEAM(GET_PLAYER(ePlayer).getTeam()).isHasMet(GET_PLAYER(eMinorCivLoop).getTeam()))6300				{6301					GET_PLAYER(eMinorCivLoop).GetMinorCivAI()->ChangeFriendshipWithMajor(ePlayer, pRewardInfo->GetCityStateInfluenceBoost());6302				}6303			}6304		}63056306		// Beaker boost based on previous turns6307		if (pRewardInfo->GetBaseBeakersTurnsToCount() > 0)6308		{6309			int iPreviousTurnsToCount = pRewardInfo->GetBaseBeakersTurnsToCount();6310			int iBeakersBonus = GET_PLAYER(ePlayer).GetScienceYieldFromPreviousTurns(GC.getGame().getGameTurn(), iPreviousTurnsToCount);6311			TechTypes eCurrentTech = GET_PLAYER(ePlayer).GetPlayerTechs()->GetCurrentResearch();6312			if(eCurrentTech == NO_TECH)6313			{6314				GET_PLAYER(ePlayer).changeOverflowResearch(iBeakersBonus);6315			}6316			else6317			{6318				GET_TEAM(GET_PLAYER(ePlayer).getTeam()).GetTeamTechs()->ChangeResearchProgress(eCurrentTech, iBeakersBonus, ePlayer);6319			}6320		}63216322		// Free unit class6323		if (pRewardInfo->GetFreeUnitClass() != NO_UNITCLASS)6324		{6325			UnitTypes eUnit = (UnitTypes) GET_PLAYER(ePlayer).getCivilizationInfo().getCivilizationUnits(pRewardInfo->GetFreeUnitClass());6326			if (eUnit != NO_UNIT)6327			{6328				CvCity* pCapital = GET_PLAYER(ePlayer).getCapitalCity();6329				if (pCapital)6330				{6331					CvUnit* pUnit = GET_PLAYER(ePlayer).initUnit(eUnit, pCapital->getX(), pCapital->getY());6332					pUnit->jumpToNearestValidPlot();6333				}6334			}6335		}6336	}6337}

Calls

Called by