int numberShares;
void CvTeam::updateTechShare(TechTypes eTech)
{
int iBestShare;
int iCount;
int iI;
if (isHasTech(eTech))
{
return;
}
//Vincentz Techshare
if (!GET_PLAYER(getLeaderID()).canResearch(eTech))
{
return;
}
iBestShare = MAX_INT;
for (iI = 0; iI < MAX_TEAMS; iI++)
{
if (isTechShare(iI))
{
iBestShare = std::min(iBestShare, (iI + 1));
}
}
if (iBestShare != MAX_INT)
{
iCount = 0;
for (iI = 0; iI < MAX_CIV_TEAMS; iI++)
{
if (GET_TEAM((TeamTypes)iI).isAlive())
{
if (GET_TEAM((TeamTypes)iI).isHasTech(eTech))
{
if (isHasMet((TeamTypes)iI))
{
FAssertMsg(iI != getID(), "iI is not expected to be equal with getID()");
iCount++;
//Vincentz Techshare Start
if (isOpenBorders((TeamTypes)iI))
{
iCount++;
}
}
}
}
}
/* if (iCount >= iBestShare)
{
setHasTech(eTech, true, NO_PLAYER, true, true);
}
*/
if ((GC.getGameINLINE().getSorenRandNum((10+iBestShare), "Project Tech Sharing")) < (GC.getDefineINT("PROJECT_TECHSHARE_CHANCE"))
&& (numberShares < (10 - iBestShare))) //
{
int newProjectResearch = (getResearchCost(eTech) * iCount * GC.getGameINLINE().getSorenRandNum(10, "Project Tech Sharing") * GC.getDefineINT("PROJECT_TECHSHARE_MODIFIER"));
newProjectResearch /= (MAX_PLAYERS * iBestShare * (GC.getGameSpeedInfo(GC.getGameINLINE().getGameSpeedType()).getResearchPercent()));
if (isHuman())
{
newProjectResearch *= (GC.getHandicapInfo(getHandicapType()).getNoTechTradeModifier());
newProjectResearch /= 100;
}
if (newProjectResearch > 0)
{
for (int iI = 0; iI < MAX_PLAYERS; iI++)
{
if (GET_PLAYER((PlayerTypes)iI).isAlive())
{
if (GET_PLAYER((PlayerTypes)iI).getTeam() == getID())
{
changeResearchProgress(eTech, (newProjectResearch), (PlayerTypes)iI);
// changeResearchProgress(eTech, (newProjectResearch), getID());
numberShares++;
CvWString szBuffer = gDLL->getText("TXT_KEY_GOT_RESEARCH_FROM_PROJECT", GC.getTechInfo(eTech).getTextKeyWide(), newProjectResearch);
gDLL->getInterfaceIFace()->addMessage(((PlayerTypes)iI), false, GC.getEVENT_MESSAGE_TIME(), szBuffer, "AS2D_PROJECT_COMPLETED", MESSAGE_TYPE_INFO, NULL, (ColorTypes)GC.getInfoTypeForString("COLOR_HIGHLIGHT_TEXT"));
}
}
}
}
}
}
}
//Vincentz Techshare End
void CvTeam::updateTechShare()
{
int iI;
numberShares = 0;//Vincentz Techshare
for (iI = 0; iI < GC.getNumTechInfos(); iI++)
{
updateTechShare((TechTypes)iI);
}
}