Request Help with python problem

Marnok

Marnok
Joined
Mar 24, 2008
Messages
506
Is there a difference between the return for getOwner() based on what type of object it is called on?

Code:
def reqMarnokBarbarianAllyDungeonConvert(caster):
	pPlot = caster.plot()
	pPlayer = gc.getPlayer(caster.getOwner())
	pPlotOwner = gc.getPlayer(pPlot.getOwner())
	if pPlot.getImprovementType() != gc.getInfoTypeForString('IMPROVEMENT_BARROW') and pPlot.getImprovementType() != gc.getInfoTypeForString('IMPROVEMENT_RUINS'):
		return False
	if pPlotOwner != pPlayer:
		caster.setName(pPlotOwner.getName()+" "+pPlayer.getName())
		return False
	if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_BARBARIAN')):
		return True
	return False

When it ought to pass because plot owner is the same as the player, it fails. I put the setName in to prove this check was failing, and it is, because I am getting the name "Marnok Marnok" on these units.
I admit a lack of sleep, but I can't see why this would be, at all.
Can anyone shed any light for me?
 
The problems comes from gc.getPlayer . This create a python object that doesn't pass the tests (== , != , ...) , this is a built in function . And even if they are the same , for python this is two built in functions located at two different pointers ... so differents .

This should work :

Spoiler :
Code:
def reqMarnokBarbarianAllyDungeonConvert(caster):
	pPlot = caster.plot()
	iUnitOwner = caster.getOwner()
	iPlotOwner = pPlot.getOwner()
	if iPlotOwner == -1 : return False
	pPlayer = gc.getPlayer(iUnitOwner)
	pPlotOwner = gc.getPlayer(pPlot.getOwner())
	if pPlot.getImprovementType() != gc.getInfoTypeForString('IMPROVEMENT_BARROW') and pPlot.getImprovementType() != gc.getInfoTypeForString('IMPROVEMENT_RUINS'):
		return False
	if iUnitOwner != iPlotOwner :
		caster.setName(pPlotOwner.getName()+" "+pPlayer.getName())
		return False
	if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_BARBARIAN')):
		return True
	return False

Tcho !
 
OK - coffee fixed it (I think...)

Code:
def reqMarnokBarbarianAllyDungeonConvert(caster):
	pPlot = caster.plot()
	pPlayer = gc.getPlayer(caster.getOwner())
	pOwner = caster.getOwner()
	pPlotOwner = pPlot.getOwner()
	if pPlot.getImprovementType() != gc.getInfoTypeForString('IMPROVEMENT_BARROW') and pPlot.getImprovementType() != gc.getInfoTypeForString('IMPROVEMENT_RUINS'):
		return False
	if pPlotOwner != pOwner:
		return False
	if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_BARBARIAN')):
		return True	
	return False
 
The problems comes from gc.getPlayer . This create a python object that doesn't pass the tests (== , != , ...) , this is a built in function . And even if they are the same , for python this is two built in functions located at two different pointers ... so differents .

This should work :

Spoiler :
Code:
def reqMarnokBarbarianAllyDungeonConvert(caster):
	pPlot = caster.plot()
	iUnitOwner = caster.getOwner()
	iPlotOwner = pPlot.getOwner()
	if iPlotOwner == -1 : return False
	pPlayer = gc.getPlayer(iUnitOwner)
	pPlotOwner = gc.getPlayer(pPlot.getOwner())
	if pPlot.getImprovementType() != gc.getInfoTypeForString('IMPROVEMENT_BARROW') and pPlot.getImprovementType() != gc.getInfoTypeForString('IMPROVEMENT_RUINS'):
		return False
	if iUnitOwner != iPlotOwner :
		caster.setName(pPlotOwner.getName()+" "+pPlayer.getName())
		return False
	if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_BARBARIAN')):
		return True
	return False

Tcho !

Thanks! You got it. My reply crossed with yours, could have saved myself some time by hitting refresh! Thanks for the explanation, I learn a little more each day.
 
Back
Top Bottom