Fallen_Kings
Chieftain
- Joined
- Oct 21, 2013
- Messages
- 97
This idea is invented and developed by landice,ming_infinite,etc.in CIV.
Link:http://www.civclub.net/bbs/viewthread.php?tid=124152&extra=page%3D1
Adopting all policies in the Patronage tree will cause allied City-States to occasionally gift you Great People.At normal speed,a random GP is gifted every 37 turns by default,with the addition of random 0-6,if you have at least one allied CS.Each additional allied CS will reduce the turns by 1(but total subtractor can't be more than 10).To make this more attractive,the first "gift" is half time off.
This is what we more or less know before.However,it is found recently(by landice in CIV)that,during the countdown,each time you become ally with a CS,no matter you were its ally or not at the beginning,will reduces the turns by 2.
For example:
In a standard-size map,you have finished Patronage tree and just receive a GP this turn.Suppose you have all(16) CS allied with 60 influence,and you have gifted all of them a unit 3 turns before.Now let's see what will happen:
1.A GP is gifted,so the counter is reset:
Initial counter=37+random(0-6)-10=27-33,take it 33.
2.When it comes to CS'turn,,your influence with each CS decreases to 59 or 58,so you are no longer their ally,but then your gifted unit arrives,so you gain 5 influence and become their ally again.So each CS reduces the counter by 2.
counter=33-16*2=1(in CS'turn the counter cannot be 0 or less,so if the initial counter
is 27 the counter here will still be 1)
3.When your next turn begins,the counter becomes 0 and the countdown is over,so you receive a new GP!
The tip is to make your influence fluctuate around allied level,gifting unit may be the most efficient way to do this,but you can only gift one unit every 3 turns and to make the influence drop 1.67/turn you may have to get nasty(declare war with nearby CS too often before).Other methods like gifting money,bully,DOW and even gunpowder diplomacy may work as well,but they are either ineffient or too expensive.
EDIT:My fault.This mechanic has been nerfed before and the the multiplier 2 in the second equation is actually 1.(The DEVs forgot to correct relevant notes and I didn't read XML to find this mistake.)
wrong:counter=33-16*2=1
correct:counter=33-16=17
Code:
void CvPlayer:: DoSeedGreatPeopleSpawnCounter()
{
int iNumTurns = /*37*/ GC.getMINOR_TURNS_GREAT_PEOPLE_SPAWN_BASE();
// Start at -1 since if we only have one ally we don't want to add any more
int iExtraAllies = -1;
PlayerTypes eMinor;
for(int iMinorLoop = MAX_MAJOR_CIVS; iMinorLoop < MAX_CIV_PLAYERS; iMinorLoop++)
{
eMinor = (PlayerTypes) iMinorLoop;
// Not alive
if(!GET_PLAYER(eMinor).isAlive())
continue;
if(GET_PLAYER(eMinor).GetMinorCivAI()->GetAlly() == GetID())
iExtraAllies++;
}
if(iExtraAllies > 0)
{
int iExtraAlliesChange = iExtraAllies* /*-1*/ GC.getMINOR_ADDITIONAL_ALLIES_GP_CHANGE();
iExtraAlliesChange = max(/*-10*/ GC.getMAX_MINOR_ADDITIONAL_ALLIES_GP_CHANGE(), iExtraAlliesChange);
iNumTurns += iExtraAlliesChange;
}
int iRand = /*7*/ GC.getMINOR_TURNS_GREAT_PEOPLE_SPAWN_RAND();
iNumTurns += GC.getGame().getJonRandNum(iRand, "Rand turns for Friendly Minor GreatPeople spawn");
// If we're biasing the result then decrease the number of turns
if(!IsAlliesGreatPersonBiasApplied())
{
iNumTurns *= /*50*/ GC.getMINOR_TURNS_GREAT_PEOPLE_SPAWN_BIAS_MULTIPLY();
iNumTurns /= 100;
SetAlliesGreatPersonBiasApplied(true);
}
// Modify for Game Speed
iNumTurns *= GC.getGame().getGameSpeedInfo().getGreatPeoplePercent();
iNumTurns /= 100;
if(iNumTurns < 1)
iNumTurns = 1;
SetGreatPeopleSpawnCounter(iNumTurns);
}
void CvPlayer:: DoApplyNewAllyGPBonus()
{
int iChange = /*-2*/ GC.getMINOR_ADDITIONAL_ALLIES_GP_CHANGE();(this note is wrong!)
ChangeGreatPeopleSpawnCounter(iChange);
if(GetGreatPeopleSpawnCounter() < 1)
SetGreatPeopleSpawnCounter(1);
}
Link:http://www.civclub.net/bbs/viewthread.php?tid=124152&extra=page%3D1
Adopting all policies in the Patronage tree will cause allied City-States to occasionally gift you Great People.At normal speed,a random GP is gifted every 37 turns by default,with the addition of random 0-6,if you have at least one allied CS.Each additional allied CS will reduce the turns by 1(but total subtractor can't be more than 10).To make this more attractive,the first "gift" is half time off.
This is what we more or less know before.However,it is found recently(by landice in CIV)that,during the countdown,each time you become ally with a CS,no matter you were its ally or not at the beginning,will reduces the turns by 2.
For example:
In a standard-size map,you have finished Patronage tree and just receive a GP this turn.Suppose you have all(16) CS allied with 60 influence,and you have gifted all of them a unit 3 turns before.Now let's see what will happen:
1.A GP is gifted,so the counter is reset:
Initial counter=37+random(0-6)-10=27-33,take it 33.
2.When it comes to CS'turn,,your influence with each CS decreases to 59 or 58,so you are no longer their ally,but then your gifted unit arrives,so you gain 5 influence and become their ally again.So each CS reduces the counter by 2.
counter=33-16*2=1(in CS'turn the counter cannot be 0 or less,so if the initial counter
is 27 the counter here will still be 1)
3.When your next turn begins,the counter becomes 0 and the countdown is over,so you receive a new GP!
The tip is to make your influence fluctuate around allied level,gifting unit may be the most efficient way to do this,but you can only gift one unit every 3 turns and to make the influence drop 1.67/turn you may have to get nasty(declare war with nearby CS too often before).Other methods like gifting money,bully,DOW and even gunpowder diplomacy may work as well,but they are either ineffient or too expensive.
EDIT:My fault.This mechanic has been nerfed before and the the multiplier 2 in the second equation is actually 1.(The DEVs forgot to correct relevant notes and I didn't read XML to find this mistake.)
wrong:counter=33-16*2=1
correct:counter=33-16=17
Code:
void CvPlayer:: DoSeedGreatPeopleSpawnCounter()
{
int iNumTurns = /*37*/ GC.getMINOR_TURNS_GREAT_PEOPLE_SPAWN_BASE();
// Start at -1 since if we only have one ally we don't want to add any more
int iExtraAllies = -1;
PlayerTypes eMinor;
for(int iMinorLoop = MAX_MAJOR_CIVS; iMinorLoop < MAX_CIV_PLAYERS; iMinorLoop++)
{
eMinor = (PlayerTypes) iMinorLoop;
// Not alive
if(!GET_PLAYER(eMinor).isAlive())
continue;
if(GET_PLAYER(eMinor).GetMinorCivAI()->GetAlly() == GetID())
iExtraAllies++;
}
if(iExtraAllies > 0)
{
int iExtraAlliesChange = iExtraAllies* /*-1*/ GC.getMINOR_ADDITIONAL_ALLIES_GP_CHANGE();
iExtraAlliesChange = max(/*-10*/ GC.getMAX_MINOR_ADDITIONAL_ALLIES_GP_CHANGE(), iExtraAlliesChange);
iNumTurns += iExtraAlliesChange;
}
int iRand = /*7*/ GC.getMINOR_TURNS_GREAT_PEOPLE_SPAWN_RAND();
iNumTurns += GC.getGame().getJonRandNum(iRand, "Rand turns for Friendly Minor GreatPeople spawn");
// If we're biasing the result then decrease the number of turns
if(!IsAlliesGreatPersonBiasApplied())
{
iNumTurns *= /*50*/ GC.getMINOR_TURNS_GREAT_PEOPLE_SPAWN_BIAS_MULTIPLY();
iNumTurns /= 100;
SetAlliesGreatPersonBiasApplied(true);
}
// Modify for Game Speed
iNumTurns *= GC.getGame().getGameSpeedInfo().getGreatPeoplePercent();
iNumTurns /= 100;
if(iNumTurns < 1)
iNumTurns = 1;
SetGreatPeopleSpawnCounter(iNumTurns);
}
void CvPlayer:: DoApplyNewAllyGPBonus()
{
int iChange = /*-2*/ GC.getMINOR_ADDITIONAL_ALLIES_GP_CHANGE();(this note is wrong!)
ChangeGreatPeopleSpawnCounter(iChange);
if(GetGreatPeopleSpawnCounter() < 1)
SetGreatPeopleSpawnCounter(1);
}