GetNumAvailabeBonus

Duke176

Warlord
Joined
Oct 19, 2006
Messages
241
Location
Turin - Italy
a question:

Code:
int CvPlayer::getNumAvailablePlatforms()
{
	return (getNumAvailableBonuses((BonusTypes)GC.getInfoTypeForString("BONUS_OIL")));
}

The question is:
does this function return the number of OIL bonuses possessed by your Civ?
For possessed I mean that have the improvement that connect and let you use the Bonus?

I'm trying to understand what's wrong in this code:

Code:
//------------------------------------- OIL PROD PER TURN ----------------------------------
//returns number = ammount of extraction per turn (from terraininfo.xml)

int CvPlayer::oilExtractionPerTurnFromWells()
{
	return GC.getImprovementInfo(...getTypeForString("IMPROVEMENT_WELL")).getOilExtractionPerTurn();
}

int CvPlayer::oilExtractionPerTurnFromPlatforms()
{
	return GC.getImprovementInfo(...getTypeForString("IMPROVEMENT_OFFSHORE_PLATFORMS")).getOilExtractionPerTurn();
}

//returns number of oil bonuses in use by Civ
int CvPlayer::getNumAvailableOilImprovements()
{
	return (getNumAvailableBonuses((BonusTypes)GC.getInfoTypeForString("BONUS_OIL")));
}

//calculate Oil Prod per Turn
int CvPlayer::calculateOilProdPerTurn()
{
	int iChange;
             iChange = 0;

	iChange = (getNumAvailableOilImprovements()) * ((oilExtractionPerTurnFromWells() + oilExtractionPerTurnFromPlatforms());
	return iChange;
        changeOilProdPerTurn(iChange);
}

//Modify Oil Prod Per Turn
//get
int CvPlayer::getOilProdPerTurn()
{
	return m_iOilProdPerTurn;
}

//set
void CvPlayer::setOilProdPerTurn(int iNewValue)
{
	if (getOilProdPerTurn() != iNewValue)
	{
		m_iOilProdPerTurn = iNewValue;
	}
}

void CvPlayer::changeOilProdPerTurn(int iChange)
{
	setOilProdPerTurn(getOilProdPerTurn() + iChange);
}

//--------------------------------------- end -------------------------------------------------------------------
//-------------------------------------- OIL RESERVE -------------------------------------------
int CvPlayer::getOilReserve()
{
	return m_iOilReserve;
}


void CvPlayer::setOilReserve(int iNewValue)
{
	if (getOilReserve() != iNewValue)
	{
		m_iOilReserve = iNewValue;

		if (getID() == GC.getGameINLINE().getActivePlayer())
		{
			gDLL->getInterfaceIFace()->setDirty(MiscButtons_DIRTY_BIT, true);
			gDLL->getInterfaceIFace()->setDirty(SelectionButtons_DIRTY_BIT, true);
			gDLL->getInterfaceIFace()->setDirty(GameData_DIRTY_BIT, true);
		}
	}
}


void CvPlayer::changeOilReserve(int iChange)
{
	setOilReserve(getOilReserve() + iChange);
}

//----------------------------------------- end -----------------------------------------------------

And one more thing do anyone knows how to make this new Value (OILRESERVE) shown on main interface screen under culture or science?
This way I would be able to check if the function works and why it doesn't.
Thx in advance.
 
and the answer is YES!
I'm making some begugging using advisors screens and changing the functions that recalls.

Now I'm trying to understand what's wrong with OilProdPerTurn
 
now I get it the prb was inside
Code:
setOilProdPerTurn(iResoult)
I should have set
Code:
setOilProdPerTurn(calculateOilProdPerTurn())
as Kael told me long ago... SORRY.
 
pardon I'm a complitely idiot, I forgot to make the changeOilProdPerTurn mod OilReserve

so at the end of setOilProdPerTurn, I should put ChangeOilReserve(iNewValue).


Am I getting better Kael no :D?
 
pardon I'm a complitely idiot, I forgot to make the changeOilProdPerTurn mod OilReserve

so at the end of setOilProdPerTurn, I should put ChangeOilReserve(iNewValue).

Am I getting better Kael no :D?

Much faster than me, I feel like I beat my head against this stuff forever (and got lots of help form the other folks here). Im excited to see what its like when you're all done.
 
Code:
int CvPlayer::oilExtractionPerTurnFromPlatforms()
{
	return GC.getImprovementInfo(...getTypeForString("IMPROVEMENT_OFFSHORE_PLATFORMS")).getOilExtractionPerTurn();
}

//returns number of oil bonuses in use by Civ
int CvPlayer::getNumAvailableOilImprovements()
{
	return (getNumAvailableBonuses((BonusTypes)GC.getInfoTypeForString("BONUS_OIL")));
}

[COLOR="darkred"]//calculate Oil Prod per Turn
int CvPlayer::calculateOilProdPerTurn()
{
	return = (getNumAvailableOilImprovements()) * ((oilExtractionPerTurnFromWells() + oilExtractionPerTurnFromPlatforms());
	changeOilProdPerTurn(calculateOilProdPerTurn);
}[/COLOR]
//Modify Oil Prod Per Turn
//get
int CvPlayer::getOilProdPerTurn()
{
	return m_iOilProdPerTurn;
}

[COLOR="DarkRed"]//set
void CvPlayer::setOilProdPerTurn(int iNewValue)
{
	if (getOilProdPerTurn() != iNewValue)
	{
		m_iOilProdPerTurn = iNewValue;
	}
             changeOilReserve(getOilReserve);
}[/COLOR]
void CvPlayer::changeOilProdPerTurn(int iChange)
{
	setOilProdPerTurn(getOilProdPerTurn() + iChange);
}

//--------------------------------------- end ---------------------
//-------------------------------------- OIL RESERVE --------------
int CvPlayer::getOilReserve()
{
	return m_iOilReserve;
}


void CvPlayer::setOilReserve(int iNewValue)
{
	if (getOilReserve() != iNewValue)
	{
		m_iOilReserve = iNewValue;

		if (getID() == GC.getGameINLINE().getActivePlayer())
		{
			gDLL->getInterfaceIFace()->setDirty(MiscButtons_DIRTY_BIT, true);
			gDLL->getInterfaceIFace()->setDirty(SelectionButtons_DIRTY_BIT, true);
			gDLL->getInterfaceIFace()->setDirty(GameData_DIRTY_BIT, true);
		}
	}
}


void CvPlayer::changeOilReserve(int iChange)
{
	setOilReserve(getOilReserve() + iChange);
}

//----------------------------------------- end --------------------

do you have any idea why the part in red couldn't be working?
I think is everything ok no?

And CalculateOilProdPerTurn -> was warking in last test (before changes from iNewValue to function call), I mean the game calculate the resoult, but it doens't transfert it to changeOilProdPerTurn(iChange)...

anyone have any idea?

at a very 1st look i see this as wrong:
Code:
void CvPlayer::setOilProdPerTurn(int iNewValue)
{
	if (getOilProdPerTurn() != iNewValue)
	{
		m_iOilProdPerTurn = iNewValue;
	}[COLOR="DarkRed"]//set
             changeOilReserve(getOilReserve);
}[/COLOR]
Because the compiler read it as If............... else changeOil.... correct?
So it should be like this:
Code:
void CvPlayer::setOilProdPerTurn(int iNewValue)
{
	if (getOilProdPerTurn() != iNewValue)
	{
		m_iOilProdPerTurn = iNewValue;
  [COLOR="DarkRed"]//set
                 changeOilReserve(getOilReserve);
	}[/COLOR]
}

but again the prb is this, from tests I see Game returns me the correc resoult for "calculateOilProdPerTurn()" but from here nothing happens in changing
"m_iOilProdPerTurn" that in game keeps on retourning the value of "0"
 
it keeps on not working even moving that row.
it's strange, to me seems to be perfect...
And it stops working from ChangeOilProdPerTurn() on...
the part with OilReserve works, and I had the chance to test it with moveOilCost using mechinfantry.

.........:( I'm starting hating SDK :lol:
 
could it be becuase i should modify python in order to start Oil Update onPlayerNewTurn?

Because I'm starting thinking the game needs it to start the functions.
Does anyone know where is it gold calculation made on new Turn Start?
 
Back
Top Bottom