Code
22238void CvPlayer::doResearch()22239{22240 if(GC.getGame().isOption(GAMEOPTION_NO_SCIENCE))22241 {22242 return;22243 }2224422245 AI_PERF_FORMAT("AI-perf.csv", ("CvPlayer::doResearch, Turn %03d, %s", GC.getGame().getElapsedGameTurns(), getCivilizationShortDescription()) );22246 bool bForceResearchChoice;22247 int iOverflowResearch;2224822249 if(GetPlayerTechs()->IsResearch())22250 {22251 bForceResearchChoice = false;2225222253 // Force player to pick Research if he doesn't have anything assigned22254 if(GetPlayerTechs()->GetCurrentResearch() == NO_TECH)22255 {22256 if(GetID() == GC.getGame().getActivePlayer() && GetScienceTimes100() > 0)22257 {22258 chooseTech();22259 }2226022261 if(GC.getGame().getElapsedGameTurns() > 4)22262 {22263 AI_chooseResearch();2226422265 bForceResearchChoice = true;22266 }22267 }2226822269 TechTypes eCurrentTech = GetPlayerTechs()->GetCurrentResearch();22270 if(eCurrentTech == NO_TECH)22271 {22272 int iOverflow = (GetScienceTimes100()) / std::max(1, calculateResearchModifier(eCurrentTech));22273 changeOverflowResearchTimes100(iOverflow);22274 }22275 else22276 {22277 iOverflowResearch = (getOverflowResearchTimes100() * calculateResearchModifier(eCurrentTech)) / 100;22278 setOverflowResearch(0);22279 if(GET_TEAM(getTeam()).GetTeamTechs())22280 {22281 int iBeakersTowardsTechTimes100 = GetScienceTimes100() + iOverflowResearch;22282#if defined(MOD_BUGFIX_RESEARCH_OVERFLOW)22283 GET_TEAM(getTeam()).GetTeamTechs()->ChangeResearchProgressTimes100(eCurrentTech, iBeakersTowardsTechTimes100, GetID(), iOverflowResearch, calculateResearchModifier(eCurrentTech));22284#else22285 GET_TEAM(getTeam()).GetTeamTechs()->ChangeResearchProgressTimes100(eCurrentTech, iBeakersTowardsTechTimes100, GetID());22286#endif22287 UpdateResearchAgreements(GetScienceTimes100() / 100);22288 }22289 }2229022291 if(bForceResearchChoice)22292 {22293 clearResearchQueue();22294 }22295 }22296 GetPlayerTechs()->CheckForTechAchievement();2229722298}