LPlate2
Warlord
- Joined
- Dec 27, 2018
- Messages
- 299
Hi,
I'm trying to implement some diplomacy code and I currently have the following in CvPlayer.AI (there is more but the rest is commented out for my bughunting).
Note: isDiploTheist is checking whether I've assigned a 1 value to bDiploTheist to the Tech in CIV4TechInfos.
The value from this is displayed due to CVGameTextMgr.cpp, which has the following,
The code did not seem to be doing what I wanted, so I created a mirror function in CvPlayer.cpp.
and exposed this to python.
The value that this calculates is being displayed to me on the main screen as I added some lines in onEndPlayerTurn to display it
Within the game I've given myself some of the relevant techs.
The CvPlayerAI.cpp calculated result from AI_getPolicyAttitude(PlayerTypes ePlayer), when I'm looking at the foreign advisor is 0 (i.e. no values displayed). (Testing with writing positive or negative values directly showed that the CvGameTextMgr code is working as it should)
The CvPlayer.cpp calculates the result of getDiploCountTest() as 5 (which is the correct number given the techs that I'd given).
---
The code in the two files is essentially identical, so why doesn't CvPlayerAI.cpp work as I want it to?
Am I incorrect in thinking that GET_TEAM(getTeam()) should return the same result when used in CvPlayerAI.cpp and CvPlayer.cpp?
I'm trying to implement some diplomacy code and I currently have the following in CvPlayer.AI (there is more but the rest is commented out for my bughunting).
Code:
int CvPlayerAI::AI_getPolicyAttitude(PlayerTypes ePlayer) const
{
int iDiploTheist = 0;
for (int iI = 0; iI < GC.getNumTechInfos(); iI++)
{
if (GET_TEAM(getTeam()).isHasTech((TechTypes)iI))
{
if (GC.getTechInfo((TechTypes)iI).isDiploTheist())
{
iDiploTheist += 1;
}
}
}
return iDiploTheist;
}
Note: isDiploTheist is checking whether I've assigned a 1 value to bDiploTheist to the Tech in CIV4TechInfos.
The value from this is displayed due to CVGameTextMgr.cpp, which has the following,
Code:
iAttitudeChange = kPlayer.AI_getPolicyAttitude(eTargetPlayer);
if ((iAttitudeChange > 0) && (iPass == 0))
{
szTempBuffer.Format(SETCOLR L"%s" ENDCOLR, TEXT_COLOR("COLOR_POSITIVE_TEXT"), gDLL->getText("TXT_KEY_MISC_ATTITUDE_POLICIES", iAttitudeChange).GetCString());
szBuffer.append(NEWLINE);
szBuffer.append(szTempBuffer);
}
if ((iAttitudeChange < 0) && (iPass == 0))
{
szTempBuffer.Format(SETCOLR L"%s" ENDCOLR, TEXT_COLOR("COLOR_NEGATIVE_TEXT"), gDLL->getText("TXT_KEY_MISC_ATTITUDE_POLICIES_NEGATIVE", iAttitudeChange).GetCString());
szBuffer.append(NEWLINE);
szBuffer.append(szTempBuffer);
}
The code did not seem to be doing what I wanted, so I created a mirror function in CvPlayer.cpp.
Code:
int CvPlayer::getDiploCountTest() const
{
int iDiploTheist = 0;
for (int iI = 0; iI < GC.getNumTechInfos(); iI++)
{
if (GET_TEAM(getTeam()).isHasTech((TechTypes)iI))
{
if (GC.getTechInfo((TechTypes)iI).isDiploTheist())
{
iDiploTheist += 1;
}
}
}
return iDiploTheist;
}
The value that this calculates is being displayed to me on the main screen as I added some lines in onEndPlayerTurn to display it
Code:
if pPlayer.isHuman():
iPolicies = pPlayer.getDiploCountTest()
CyInterface().addMessage(CyGame().getActivePlayer(),True,2,"Number of policies of interest is, %d" %(iPolicies),'',0,'',ColorTypes(8),0,0,True,True)
Within the game I've given myself some of the relevant techs.
The CvPlayerAI.cpp calculated result from AI_getPolicyAttitude(PlayerTypes ePlayer), when I'm looking at the foreign advisor is 0 (i.e. no values displayed). (Testing with writing positive or negative values directly showed that the CvGameTextMgr code is working as it should)
The CvPlayer.cpp calculates the result of getDiploCountTest() as 5 (which is the correct number given the techs that I'd given).
---
The code in the two files is essentially identical, so why doesn't CvPlayerAI.cpp work as I want it to?
Am I incorrect in thinking that GET_TEAM(getTeam()) should return the same result when used in CvPlayerAI.cpp and CvPlayer.cpp?