def FFHGiveExperience(self, caster):
i = -1
pPlayer = gc.getPlayer(caster.getOwner())
if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CHANNELING1')):
i = 25 - caster.getExperience()
if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_ARCANE')):
i = i + 5
if i <= 0:
i = 1
if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CHANNELING2')):
i = 35 - (caster.getExperience() / 2)
if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_ARCANE')):
i = i + 10
if i <= 1:
i = 2
if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_CHANNELING3')):
i = 40 - (caster.getExperience() / 3)
if pPlayer.hasTrait(gc.getInfoTypeForString('TRAIT_ARCANE')):
i = i + 15
if i <= 2:
i = 3
if caster.isHasPromotion(gc.getInfoTypeForString('PROMOTION_UNHOLY_TAINT')):
i = i + 10
iRnd = CyGame().getSorenRandNum(gc.getDefineINT('CASTER_XP_PROBABILITY'), "Bob")
if iRnd <= i:
caster.changeExperience(1,-1)