void CvGame::addPlayerAdvanced(PlayerTypes eNewPlayer, int iNewTeam, LeaderHeadTypes eLeader, CivilizationTypes eCiv)
{
PlayerColorTypes eColor = (PlayerColorTypes)GC.getCivilizationInfo(eCiv).getDefaultPlayerColor();
for (int iI = 0; iI < MAX_CIV_PLAYERS; iI++)
{
if (eColor == NO_PLAYERCOLOR || GET_PLAYER((PlayerTypes)iI).getPlayerColor() == eColor)
{
for (int iK = 0; iK < GC.getNumPlayerColorInfos(); iK++)
{
if (iK != GC.getCivilizationInfo((CivilizationTypes)GC.getDefineINT("BARBARIAN_CIVILIZATION")).getDefaultPlayerColor())
{
bool bValid = true;
for (int iL = 0; iL < MAX_CIV_PLAYERS; iL++)
{
if (GET_PLAYER((PlayerTypes)iL).getPlayerColor() == iK)
{
bValid = false;
break;
}
}
if (bValid)
{
eColor = (PlayerColorTypes)iK;
iI = MAX_CIV_PLAYERS;
break;
}
}
}
}
}
TeamTypes eTeam = GET_PLAYER(eNewPlayer).getTeam();
GC.getInitCore().setLeader(eNewPlayer, eLeader);
GC.getInitCore().setCiv(eNewPlayer, eCiv);
GC.getInitCore().setSlotStatus(eNewPlayer, SS_COMPUTER);
GC.getInitCore().setColor(eNewPlayer, eColor);
GET_TEAM(eTeam).init(eTeam);
GET_PLAYER(eNewPlayer).init(eNewPlayer);
if (iNewTeam != NO_TEAM)
{
// GET_PLAYER(eNewPlayer).setTeam((TeamTypes)iNewTeam);
GET_TEAM((TeamTypes)iNewTeam).addTeam((TeamTypes)eTeam);
gDLL->getInterfaceIFace()->setDirty(Fog_DIRTY_BIT, true);
}
else
{
iNewTeam = eTeam;
for (int iJ = 0; iJ < MAX_TEAMS; iJ++)
{
if (GET_TEAM((TeamTypes)iJ).isBarbarian() || GET_TEAM((TeamTypes)iJ).isMinorCiv())
{
if ((TeamTypes)iNewTeam != iJ)
{
GET_TEAM((TeamTypes)iNewTeam).setAtWar((TeamTypes)iJ, true);
}
}
}
}
for (int iI = 0; iI < GC.getNumTechInfos(); ++iI)
{
if (GET_TEAM((TeamTypes)iNewTeam).isHasTech((TechTypes)iI))
{
GET_PLAYER(eNewPlayer).changeAssets(GC.getTechInfo((TechTypes)iI).getAssetValue());
GET_PLAYER(eNewPlayer).changePower(GC.getTechInfo((TechTypes)iI).getPowerValue());
GET_PLAYER(eNewPlayer).changeTechScore(getTechScore((TechTypes)iI));
}
}
}