Hooks
static bool BeforeCvTeam_shareItems(CvTeam* self, TeamTypes eTeam);static void AfterCvTeam_shareItems(CvTeam* self, TeamTypes eTeam);static void ReplaceCvTeam_shareItems(void (*original)(CvTeam*, TeamTypes), CvTeam* self, TeamTypes eTeam);CivRegisterBefore<CivHooks::CvTeam_shareItems>(host, &BeforeCvTeam_shareItems);CivRegisterAfter<CivHooks::CvTeam_shareItems>(host, &AfterCvTeam_shareItems);CivRegisterReplace<CivHooks::CvTeam_shareItems>(host, &ReplaceCvTeam_shareItems);
Code
599void CvTeam::shareItems(TeamTypes eTeam)600{601 CvCity* pLoopCity;602 int iLoop;603 int iI, iJ, iK;604605 CvAssert(eTeam != NO_TEAM);606 CvAssert(eTeam != GetID());607608 CvTeam& kTeam = GET_TEAM(eTeam);609610 for(iI = 0; iI < GC.getNumTechInfos(); iI++)611 {612 if(kTeam.GetTeamTechs()->HasTech((TechTypes)iI))613 {614 setHasTech(((TechTypes)iI), true, NO_PLAYER, true, false);615 }616 }617618 for(iI = 0; iI < GC.getNumResourceInfos(); ++iI)619 {620 if(kTeam.isForceRevealedResource((ResourceTypes)iI))621 {622 setForceRevealedResource((ResourceTypes)iI, true);623 }624 }625626 for(iI = 0; iI < MAX_PLAYERS; iI++)627 {628 CvPlayerAI& kPlayer = GET_PLAYER(static_cast<PlayerTypes>(iI));629 if(kPlayer.isAlive())630 {631 if(kPlayer.getTeam() == eTeam)632 {633 for(pLoopCity = kPlayer.firstCity(&iLoop); pLoopCity != NULL; pLoopCity = kPlayer.nextCity(&iLoop))634 {635 for(iJ = 0; iJ < GC.getNumBuildingInfos(); iJ++)636 {637 const BuildingTypes eBuilding = static_cast<BuildingTypes>(iJ);638 CvBuildingEntry* pkBuildingInfo = GC.getBuildingInfo(eBuilding);639 if(pkBuildingInfo)640 {641 if(pLoopCity->GetCityBuildings()->GetNumBuilding(eBuilding) > 0)642 {643 if(!isObsoleteBuilding(eBuilding))644 {645 if(pkBuildingInfo->IsTeamShare())646 {647 for(iK = 0; iK < MAX_PLAYERS; iK++)648 {649 CvPlayerAI& kOtherPlayer = GET_PLAYER(static_cast<PlayerTypes>(iK));650 if(kOtherPlayer.isAlive() && kOtherPlayer.getTeam() == m_eID)651 {652 kOtherPlayer.processBuilding(eBuilding, pLoopCity->GetCityBuildings()->GetNumBuilding(eBuilding), /*bFirst*/ false, pLoopCity->area());653 }654 }655 }656657 processBuilding(eBuilding, pLoopCity->GetCityBuildings()->GetNumBuilding(eBuilding), /*bFirst*/ false);658 }659 }660 }661 }662 }663 }664 }665 }666667}