Grim determination - I'm Determined!

def lowestHealthPaladin():
    lowestHealth = 99999
    lowestFriend = None
    friends = self.findFriends()
    for friend in friends:
        if friend.type != "paladin":
            continue
        if friend.health < lowestHealth and friend.health < friend.maxHealth:
            lowestHealth = friend.health
            lowestFriend = friend
    
    return lowestFriend

def commandPaladin(paladin):
    # Heal the paladin with the lowest health using lowestHealthPaladin() 
    if paladin:
        lowPaladin = lowestHealthPaladin()
        if lowPaladin:
            self.command(paladin, "cast", "heal", lowPaladin)
        else:
            enemy = paladin.findNearest(hero.findEnemies)
            if enemy:
                hero.command(paladin, "shield")
    # You can use paladin.canCast("heal") and command(paladin, "cast", "heal", target)
    # Paladins can also shield: command(paladin, "shield")
    

def commandFriends():
    # Command your friends.
    friends = self.findFriends()
    for friend in friends:
        if friend.type == "peasant":
            commandPeasant(friend)
        elif friend.type == "griffin-rider":
            commandGriffin(friend)
        elif friend.type == "paladin":
            commandPaladin(friend)
def commandGriffin(griffin):
    enemy = griffin.findNearest(griffin.findEnemies())
    self.command(griffin, "attack", enemy)
    
def commandPeasant(peasant):
    coin = peasant.findNearest(peasant.findItems())
    self.command(peasant, "move", coin.pos)
while True:
    
    commandFriends()
    # Summon griffin riders!
    if hero.gold > 50:
        self.summon("griffin-rider")

There is no error, it’s just that my troops always get beaten by the ogres.

The first problem I see is…what if the paladin is unable to cast heal?

def lowestHealthPaladin():
    lowestHealth = 99999
    lowestFriend = None
    friends = self.findFriends()
    for friend in friends:
        if friend.type != "paladin":
            continue
        if friend.health < lowestHealth and friend.health < friend.maxHealth:
            lowestHealth = friend.health
            lowestFriend = friend
    
    return lowestFriend

def commandPaladin(paladin):
    # Heal the paladin with the lowest health using lowestHealthPaladin() 
    if paladin:
        enemies = hero.findEnemies()
        lowPaladin = lowestHealthPaladin()
        shaman = hero.findByType("warlock")
        if lowPaladin:
            if paladin.canCast("heal"):
                self.command(paladin, "cast", "heal", lowPaladin)
        elif shaman[0]:
            hero.command(paladin, "attack", shaman[0])
        else:
            enemy = paladin.findNearest(enemies)
            if enemy:
                hero.command(paladin, "attack", enemy)
    # Paladins can also shield: command(paladin, "shield")
    

def commandFriends():
    # Command your friends.
    friends = self.findFriends()
    for friend in friends:
        if friend.type == "peasant":
            commandPeasant(friend)
        elif friend.type == "griffin-rider":
            commandGriffin(friend)
        elif friend.type == "paladin":
            commandPaladin(friend)
def commandGriffin(griffin):
    enemy = griffin.findNearest(griffin.findEnemies())
    shaman = hero.findByType("warlock")
    if shaman[0]:
        hero.command(griffin, "attack", shaman[0])
    else:
        self.command(griffin, "attack", enemy)
    
def commandPeasant(peasant):
    coin = peasant.findNearest(peasant.findItems())
    self.command(peasant, "move", coin.pos)
while True:
    
    commandFriends()
    # Summon griffin riders!
    if hero.gold > 50:
        self.summon("griffin-rider")
still isn't working...

Rather than test for a paladin, test to see if the current paladin is ready to cast heal. If he is, then heal lowest. Else if not ready, but he is below a certain health (I used 200), then shield. Finally, if none of the above, then attack.

Also, you are using a mix of hero and self…self is a very old method and really should be replaced with hero. I read on one of the topics that hero is faster and more stable, too.

My paladins are lasting longer, but not for a whole minute yet.

1 Like

ok, good! How about targeting the warlock specifically…see if the griffon-rider sees one, attack it if yes, or attack nearest if not.

Ok, that worked! Thanks for the help!

1 Like