Bazaar developer reference

CvUnit::createGreatWork()

Defined in
CvUnit.cpp, line 7205
Class
CvUnit
Hook name
CivHooks::CvUnit_createGreatWork

Hooks

static bool BeforeCvUnit_createGreatWork(CvUnit* self, bool& result);static void AfterCvUnit_createGreatWork(CvUnit* self, bool& result);static bool ReplaceCvUnit_createGreatWork(bool (*original)(CvUnit*), CvUnit* self);CivRegisterBefore<CivHooks::CvUnit_createGreatWork>(host, &BeforeCvUnit_createGreatWork);CivRegisterAfter<CivHooks::CvUnit_createGreatWork>(host, &AfterCvUnit_createGreatWork);CivRegisterReplace<CivHooks::CvUnit_createGreatWork>(host, &ReplaceCvUnit_createGreatWork);

Code

7205bool CvUnit::createGreatWork()7206{7207	CvPlot* pPlot = plot();7208	if (!canCreateGreatWork(pPlot, false))7209	{7210		return false;7211	}72127213	CvGameCulture *pCulture = GC.getGame().GetGameCulture();7214	if(pCulture == NULL)7215	{7216		CvAssertMsg(pCulture != NULL, "This should never happen.");7217		return false;7218	}7219	7220#if defined(MOD_BUGFIX_USE_GETTERS)7221	CvPlayer &kPlayer = GET_MY_PLAYER();7222#else7223	CvPlayer &kPlayer = GET_PLAYER(m_eOwner);7224#endif7225	BuildingClassTypes eBuildingClass = NO_BUILDINGCLASS; // Passed by reference below7226	int iSlot = -1; // Passed by reference below7227	GreatWorkType eGreatWorkType = GetGreatWork();7228	GreatWorkClass eClass = CultureHelpers::GetGreatWorkClass(eGreatWorkType);7229	GreatWorkSlotType eGreatWorkSlot = CultureHelpers::GetGreatWorkSlot(eGreatWorkType);7230	7231	CvCity *pCity = kPlayer.GetCulture()->GetClosestAvailableGreatWorkSlot(getX(), getY(), eGreatWorkSlot, &eBuildingClass, &iSlot);7232	if (pCity)7233	{7234#if defined(MOD_BUGFIX_USE_GETTERS)7235		int iGWindex = pCulture->CreateGreatWork(eGreatWorkType, eClass, getOwner(), kPlayer.GetCurrentEra(), getName());7236#else7237		int iGWindex = pCulture->CreateGreatWork(eGreatWorkType, eClass, m_eOwner, kPlayer.GetCurrentEra(), getName());7238#endif7239		pCity->GetCityBuildings()->SetBuildingGreatWork(eBuildingClass, iSlot, iGWindex);72407241		if(pPlot->isActiveVisible(false))7242		{7243			auto_ptr<ICvUnit1> pDllUnit(new CvDllUnit(this));7244			gDLL->GameplayUnitActivate(pDllUnit.get());7245		}72467247		if(IsGreatPerson())7248		{7249#if defined(MOD_EVENTS_GREAT_PEOPLE)7250			kPlayer.DoGreatPersonExpended(getUnitType(), this);7251#else7252			kPlayer.DoGreatPersonExpended(getUnitType());7253#endif7254		}72557256		kill(true);72577258		bool bDontShowRewardPopup = GC.GetEngineUserInterface()->IsOptionNoRewardPopups();7259		Localization::String localizedText;72607261		// Notification in MP games7262#if defined(MOD_API_EXTENSIONS)7263		if(bDontShowRewardPopup || GC.getGame().isReallyNetworkMultiPlayer())7264#else7265		if(bDontShowRewardPopup || GC.getGame().isNetworkMultiPlayer())7266#endif7267		{7268			CvNotifications* pNotifications = kPlayer.GetNotifications();7269			if(pNotifications)7270			{7271				localizedText = Localization::Lookup("TXT_KEY_MISC_WONDER_COMPLETED");7272				localizedText << kPlayer.getNameKey() << pCulture->GetGreatWorkName(iGWindex);7273				pNotifications->Add(NOTIFICATION_GREAT_WORK_COMPLETED_ACTIVE_PLAYER, localizedText.toUTF8(), localizedText.toUTF8(), getX(), getY(), iGWindex, kPlayer.GetID());7274			}7275		}7276		// Popup in SP games7277		else7278		{7279			if(kPlayer.GetID() == GC.getGame().getActivePlayer())7280			{7281				CvPopupInfo kPopup(BUTTONPOPUP_GREAT_WORK_COMPLETED_ACTIVE_PLAYER, iGWindex);7282				GC.GetEngineUserInterface()->AddPopup(kPopup);7283			}7284		}72857286		return true;7287	}72887289	return false;7290}

Calls

Called by