Hooks
static bool BeforeCvPlayer_init(CvPlayer* self, PlayerTypes eID);static void AfterCvPlayer_init(CvPlayer* self, PlayerTypes eID);static void ReplaceCvPlayer_init(void (*original)(CvPlayer*, PlayerTypes), CvPlayer* self, PlayerTypes eID);CivRegisterBefore<CivHooks::CvPlayer_init>(host, &BeforeCvPlayer_init);CivRegisterAfter<CivHooks::CvPlayer_init>(host, &AfterCvPlayer_init);CivRegisterReplace<CivHooks::CvPlayer_init>(host, &ReplaceCvPlayer_init);
Code
546void CvPlayer::init(PlayerTypes eID)547{548#if defined(CIV_HOST_API)549 CivHostOnPlayerReset(eID);550#endif551 LeaderHeadTypes eBestPersonality;552 int iValue;553 int iBestValue;554 int iI, iJ;555556 // only allocate notifications for civs that players can play as557 if(eID < MAX_MAJOR_CIVS)558 {559 m_pNotifications = FNEW(CvNotifications, c_eCiv5GameplayDLL, 0);560#if defined(MOD_API_PLAYER_LOGS)561 m_pDiplomacyLog = FNEW(CvEventLog, c_eCiv5GameplayDLL, 0);562 m_pMilitaryLog = FNEW(CvEventLog, c_eCiv5GameplayDLL, 0);563#endif564 m_pDiplomacyRequests = FNEW(CvDiplomacyRequests, c_eCiv5GameplayDLL, 0);565 }566567 //--------------------------------568 // Init saved data569 reset(eID);570571 //--------------------------------572 // Init containers573 m_cities.Init();574575 m_units.Init();576577 m_armyAIs.Init();578579 m_AIOperations.clear();580581 //--------------------------------582 // Init non-saved data583 setupGraphical();584585 //--------------------------------586 // Init other game data587 CvAssert(getTeam() != NO_TEAM);588 GET_TEAM(getTeam()).changeNumMembers(1);589 PlayerTypes p = GetID();590 SlotStatus s = CvPreGame::slotStatus(p);591 if((s == SS_TAKEN) || (s == SS_COMPUTER))592 {593 setAlive(true);594595 if(GC.getGame().isOption(GAMEOPTION_RANDOM_PERSONALITIES))596 {597 if(!isBarbarian() && !isMinorCiv())598 {599 iBestValue = 0;600 eBestPersonality = NO_LEADER;601602 for(iI = 0; iI < GC.getNumLeaderHeadInfos(); iI++)603 {604 if(iI != GC.getBARBARIAN_LEADER() && iI != GC.getMINOR_CIVILIZATION())605 {606 iValue = (1 + GC.getGame().getJonRandNum(10000, "Choosing Personality"));607608 for(iJ = 0; iJ < MAX_CIV_PLAYERS; iJ++)609 {610 if(GET_PLAYER((PlayerTypes)iJ).isAlive())611 {612 if(GET_PLAYER((PlayerTypes)iJ).getPersonalityType() == ((LeaderHeadTypes)iI))613 {614 iValue /= 2;615 }616 }617 }618619 if(iValue > iBestValue)620 {621 iBestValue = iValue;622 eBestPersonality = ((LeaderHeadTypes)iI);623 }624 }625 }626627 if(eBestPersonality != NO_LEADER)628 {629 setPersonalityType(eBestPersonality);630 }631 }632 }633634 CvAssert(m_pTraits);635 m_pTraits->InitPlayerTraits();636637 // Special handling for the Polynesian trait's overriding of embarked unit graphics638 if(m_pTraits->IsEmbarkedAllWater())639 {640 SetEmbarkedGraphicOverride("ART_DEF_UNIT_U_POLYNESIAN_WAR_CANOE");641 }642 else if(m_pTraits->IsEmbarkedToLandFlatCost())643 {644 SetEmbarkedGraphicOverride("ART_DEF_UNIT_U_DANISH_LONGBOAT");645 }646647 changeGoldPerUnitTimes100(GC.getINITIAL_GOLD_PER_UNIT_TIMES_100());648649 ChangeMaxNumBuilders(GC.getDEFAULT_MAX_NUM_BUILDERS());650651 changeLevelExperienceModifier(GetPlayerTraits()->GetLevelExperienceModifier());652 changeMaxGlobalBuildingProductionModifier(GetPlayerTraits()->GetMaxGlobalBuildingProductionModifier());653 changeMaxTeamBuildingProductionModifier(GetPlayerTraits()->GetMaxTeamBuildingProductionModifier());654 changeMaxPlayerBuildingProductionModifier(GetPlayerTraits()->GetMaxPlayerBuildingProductionModifier());655 ChangePlotGoldCostMod(GetPlayerTraits()->GetPlotBuyCostModifier());656#if defined(MOD_TRAITS_CITY_WORKING)657 ChangeCityWorkingChange(GetPlayerTraits()->GetCityWorkingChange());658#endif659#if defined(MOD_TRAITS_CITY_AUTOMATON_WORKERS)660 ChangeCityAutomatonWorkersChange(GetPlayerTraits()->GetCityAutomatonWorkersChange());661#endif662 ChangePlotCultureCostModifier(GetPlayerTraits()->GetPlotCultureCostModifier());663 GetTreasury()->ChangeCityConnectionTradeRouteGoldChange(GetPlayerTraits()->GetCityConnectionTradeRouteChange());664 changeWonderProductionModifier(GetPlayerTraits()->GetWonderProductionModifier());665 ChangeRouteGoldMaintenanceMod(GetPlayerTraits()->GetImprovementMaintenanceModifier());666667 for(iJ = 0; iJ < NUM_YIELD_TYPES; iJ++)668 {669#if defined(MOD_BUGFIX_MINOR)670 ChangeCityYieldChangeTimes100((YieldTypes)iJ, 100 * GetPlayerTraits()->GetFreeCityYield((YieldTypes)iJ));671#else672 ChangeCityYieldChange((YieldTypes)iJ, 100 * GetPlayerTraits()->GetFreeCityYield((YieldTypes)iJ));673#endif674 changeYieldRateModifier((YieldTypes)iJ, GetPlayerTraits()->GetYieldRateModifier((YieldTypes)iJ));675 }676677 recomputeGreatPeopleModifiers();678679 for(iI = 0; iI < NUM_YIELD_TYPES; iI++)680 {681 updateExtraYieldThreshold((YieldTypes)iI);682 }683684 CvCivilizationInfo& playerCivilizationInfo = getCivilizationInfo();685 for(iI = 0; iI < GC.getNumUnitClassInfos(); ++iI)686 {687 const UnitClassTypes eUnitClass = static_cast<UnitClassTypes>(iI);688 CvUnitClassInfo* pkUnitClassInfo = GC.getUnitClassInfo(eUnitClass);689 if(pkUnitClassInfo != NULL)690 {691 const UnitTypes eUnit = ((UnitTypes)(playerCivilizationInfo.getCivilizationUnits(iI)));692 if(NO_UNIT != eUnit)693 {694 CvUnitEntry* pkUnitInfo = GC.getUnitInfo(eUnit);695 if(NULL != pkUnitInfo && pkUnitInfo->IsFound())696 {697 setUnitExtraCost(eUnitClass, getNewCityProductionValue());698 }699 }700 }701 }702703 BuildingTypes eFreeBuilding = GetPlayerTraits()->GetFreeBuilding();704 if(eFreeBuilding != NO_BUILDING)705 {706 changeFreeBuildingCount(eFreeBuilding, 1);707 }708709 SetGreatGeneralCombatBonus(GC.getGREAT_GENERAL_STRENGTH_MOD());710 }711712 m_aiPlots.clear();713 m_bfEverConqueredBy.ClearAll();714715 AI_init();716}