Hero Placeholder need something to command error

What i need to change to fix the error?

def commandGriff(enemy):
    griff = hero.findByType("griffin-rider")
    if enemy and griff:
        hero.command(griff, "attack", enemy)
    elif griff:
        hero.command(griff, "move", {'x': 78, 'y': 40})

The issue is here, you need to change this line, for example to find nearest enemy.

Also place the function of this line after all the functions of commanding soldier, archers, etc.

1 Like

Like this? enemy = hero.findNearest(hero.findByType("robot-walker")?

1 Like

Yes, it works (20chars)

1 Like

whoops wrong topic sry

@Haris what level is this exactly?

Kelvintaph Burgler. 20 chars

I change that but still get the error

New code? (20 chars)

here.

coors1 = [0, 0]
coors2 = [0, 0]

def lowestHealthFriend():
    lowestHealth = 99999
    lowestFriend = None
    friends = self.findFriends()
    for friend in friends:
        if friend.health < lowestHealth and friend.health < friend.maxHealth:
            lowestHealth = friend.health
            lowestFriend = friend

    return lowestFriend


def moveTo(position, fast = True):
    if(self.isReady("jump") and fast):
        self.jumpTo(position)
    else:
        self.move(position)
summonTypes = ['griffin-rider']
def summonTroops():
    type = summonTypes[len(self.built)%len(summonTypes)]
    if self.gold > self.costOf(type):
        self.summon(type)

def commandGriff(enemy):
    griff = hero.findByType("griffin-rider")
    if enemy and griff:
        hero.command(griff, "attack", enemy)
    elif griff:
        hero.command(griff, "move", {'x': 78, 'y': 40})

def commandTroops():
    for index, friend in enumerate(self.findNearest(hero.findFriend())):
        if chieftain and friend.type != 'paladin':
            continue
        if witch and friend.type != 'paladin':
            continue
        if chieftain and chieftain.pos.x<57 and chieftain.pos.x>43:
             self.command(friend, "move", {'x':25, 'y':48})
        elif not chieftain and friend.pos.x<40:
             self.command(friend, "move", {'x':51, 'y':51})
        elif friend.type == 'paladin':
            CommandPaladin(friend)
        elif friend.type == 'soldier':
            if friend.pos.y>30:
                CommandSoldier(friend)
            else:
                KillRobots(friend)
        else:
            CommandArcher(friend)

def CommandPaladin(paladin):
    if(paladin.canCast("heal") and not chieftain):
        target = lowestHealthFriend()
        if target:
            self.command(paladin, "cast", "heal", target)
    elif(paladin.health<100):
        self.command(paladin, "shield")
    else:
        if witch:
            self.command(paladin, "attack", witch)
        elif(chieftain):
            self.command(paladin, "attack", chieftain)
        else:
            self.command(paladin, "move", {'x':78, 'y':40})

def CommandSoldier(soldier):
    if witch:
        self.command(soldier, "attack", witch)
    else:
        self.command(soldier, "move", {'x':78, 'y':40})

def CommandArcher(soldier):
    if witch:
        self.command(soldier, "attack", witch)
    else:
        self.command(soldier, "move", {'x':78, 'y':40})

def KillRobots(soldier):
    robot = self.findNearest(self.findEnemies())
    if robot:
        self.command(soldier, "attack", robot)

def RunFrom():
    missiles = self.findEnemyMissiles()
    missle = self.findNearest(missiles)
    if len(missiles)>0:
        coors1[0] = missle.pos.x
        coors1[1] = missle.pos.y
        y = findTheY(coors1[0], coors2[0], coors1[1], coors2[1], self.pos.x)
        if y >15:
            moveTo({'x':self.pos.x, 'y':10}, False)
        else:
            moveTo({'x':self.pos.x, 'y':20}, False)
        coors2[0] = coors1[0]
        coors2[1] = coors1[1]

            
def findTheY(x1, x2, y1, y2, x):
    if(y2!=y1):
        y = (x - x1)/(x2 - x1)*(y2 - y1) + y1
    else:
        y = y1
    return y

def findTheMiddle(pos1, pos2):
    return {'x':(pos1.x+pos2.x)/2,'y':(pos1.y+pos2.y)/2}

while True:
    #CHill
    witch = self.findNearest(self.findByType('witch'))
    chieftain = self.findNearest(self.findByType('chieftain'))
    
    
    if witch or chieftain:
        RunFrom()
    summonTroops()
    commandGriff(hero.findByType("robot-walker"))
    commandTroops()

and i get the error at this part.

def commandGriff(enemy):
    griff = hero.findByType("griffin-rider")
    if enemy and griff:
        hero.command(griff, "attack", enemy)
    elif griff:
        hero.command(griff, "move", {'x': 78, 'y': 40})

This returns a list, you don’t need it this way. Either make a for-loop to get a specific index. (I think for-loops are better)

1 Like

Yes finnaly! i don’t get the hero placeholder error but i get i one more error


look What that mean?

can you repost your code?

1 Like

here.

coors1 = [0, 0]
coors2 = [0, 0]

def lowestHealthFriend():
    lowestHealth = 99999
    lowestFriend = None
    friends = self.findFriends()
    for friend in friends:
        if friend.health < lowestHealth and friend.health < friend.maxHealth:
            lowestHealth = friend.health
            lowestFriend = friend

    return lowestFriend


def moveTo(position, fast = True):
    if(self.isReady("jump") and fast):
        self.jumpTo(position)
    else:
        self.move(position)
summonTypes = ['griffin-rider']
def summonTroops():
    type = summonTypes[len(self.built)%len(summonTypes)]
    if self.gold > self.costOf(type):
        self.summon(type)

def commandGriff(enemy):
    griffs = hero.findByType("griffin-rider")
    for griff in griffs:
        if enemy and griff:
            hero.command(griff, "attack", enemy)
        elif griff:
            +hero.command(griff, "move", {'x': 78, 'y': 40})

def commandTroops():
    for index, friend in enumerate(self.findNearest(hero.findFriend())):
        if chieftain and friend.type != 'paladin':
            continue
        if witch and friend.type != 'paladin':
            continue
        if chieftain and chieftain.pos.x<57 and chieftain.pos.x>43:
             self.command(friend, "move", {'x':25, 'y':48})
        elif not chieftain and friend.pos.x<40:
             self.command(friend, "move", {'x':51, 'y':51})
        elif friend.type == 'paladin':
            CommandPaladin(friend)
        elif friend.type == 'soldier':
            if friend.pos.y>30:
                CommandSoldier(friend)
            else:
                KillRobots(friend)
        else:
            CommandArcher(friend)

def CommandPaladin(paladin):
    if(paladin.canCast("heal") and not chieftain):
        target = lowestHealthFriend()
        if target:
            self.command(paladin, "cast", "heal", target)
    elif(paladin.health<100):
        self.command(paladin, "shield")
    else:
        if witch:
            self.command(paladin, "attack", witch)
        elif(chieftain):
            self.command(paladin, "attack", chieftain)
        else:
            self.command(paladin, "move", {'x':78, 'y':40})

def CommandSoldier(soldier):
    if witch:
        self.command(soldier, "attack", witch)
    else:
        self.command(soldier, "move", {'x':78, 'y':40})

def CommandArcher(soldier):
    if witch:
        self.command(soldier, "attack", witch)
    else:
        self.command(soldier, "move", {'x':78, 'y':40})

def KillRobots(soldier):
    robot = self.findNearest(self.findEnemies())
    if robot:
        self.command(soldier, "attack", robot)

def RunFrom():
    missiles = self.findEnemyMissiles()
    missle = self.findNearest(missiles)
    if len(missiles)>0:
        coors1[0] = missle.pos.x
        coors1[1] = missle.pos.y
        y = findTheY(coors1[0], coors2[0], coors1[1], coors2[1], self.pos.x)
        if y >15:
            moveTo({'x':self.pos.x, 'y':10}, False)
        else:
            moveTo({'x':self.pos.x, 'y':20}, False)
        coors2[0] = coors1[0]
        coors2[1] = coors1[1]

            
def findTheY(x1, x2, y1, y2, x):
    if(y2!=y1):
        y = (x - x1)/(x2 - x1)*(y2 - y1) + y1
    else:
        y = y1
    return y

def findTheMiddle(pos1, pos2):
    return {'x':(pos1.x+pos2.x)/2,'y':(pos1.y+pos2.y)/2}

while True:
    #CHill
    witch = self.findNearest(self.findByType('witch'))
    chieftain = self.findNearest(self.findByType('chieftain'))
    
    
    if witch or chieftain:
        RunFrom()
    summonTroops()
    commandGriff(hero.findByType("robot-walker"))
    commandTroops()

You need to put all of this directly before the while-true loop
But I’m not sure about the error you are getting

1 Like

noot woorking. 20 chars