I want the paladin to move near the chieftan and come back to the other side but she only stays on one side.
Here is my code:
distracted_chieftan = False
def commandPaladin(friend):
if not distracted_chieftan:
hero.command(friend, "move", Vector(53,50))
dodge()
dodge()
dodge()
dodge()
distracted_chieftan = True
if distracted_chieftan:
hero.command(friend, "move", Vector(32,50))
def almostEqual(a, b):
return a-4 < b < a+4
def dodge():
missles = hero.findEnemyMissiles()
if len(missles) != 0:
missle = hero.findNearest(missles)
if missle:
distance = hero.distanceTo(missle)
if distance < 5:
if almostEqual(hero.pos.y, 14):
hero.moveXY(hero.pos.x, hero.pos.y-8)
elif almostEqual(hero.pos.y, 6):
hero.moveXY(hero.pos.x, hero.pos.y+8)
while True:
dodge()
paladin = hero.findByType("paladin")[0]
commandPaladin(paladin)
xython
March 27, 2021, 9:31pm
2
Do you want this?
def commandPaladin(friend):
if friend:
if not distracted_chieftan:
hero.command(friend, "move", Vector(53,50))
# dodge()...
distracted_chieftan = True
elif distracted_chieftan:
hero.command(friend, "move", Vector(32,50))
I like the way you move
1 Like
Well, but he won’t move to the other side.
I changed my code with different variables:
# What eldritch artifacts are these? Don't let them blast you!
# The ice gate will open when both ogres are defeated.
dis = False
def commandPaladin(friend):
if not dis:
hero.command(friend, "move", Vector(53,50))
distracted_chieftan = True
if dis:
hero.command(friend, "move", Vector(32,50))
def almostEqual(a, b):
return a-4 < b < a+4
def dodge():
missles = hero.findEnemyMissiles()
if len(missles) != 0:
missle = hero.findNearest(missles)
if missle:
distance = hero.distanceTo(missle)
if distance < 5:
if almostEqual(hero.pos.y, 14):
hero.moveXY(hero.pos.x, hero.pos.y-8)
elif almostEqual(hero.pos.y, 6):
hero.moveXY(hero.pos.x, hero.pos.y+8)
while True:
dodge()
paladin = hero.findByType("paladin")[0]
commandPaladin(paladin)
but now he won’t move back to the other side.
xython
March 27, 2021, 9:55pm
5
You want the paladin to turn toward the initial position as in this animation?
Actually, I’ve already changed my code to work. Thanks for all the help!
xython
March 28, 2021, 12:32am
7
I’m curious how you solved it
I tried this code and it failed:
distracted_chieftan = False
pos1 = Vector(53,50)
pos2 = Vector(32,50)
def commandPaladin(friend):
if friend:
if not distracted_chieftan:
hero.command(friend, "move", pos1)
if friend.distanceTo(pos1) == 0:
distracted_chieftan = True
if distracted_chieftan:
hero.command(friend, "move", pos2)
while True:
dodge()
friend = hero.findByType("paladin")[0]
commandPaladin(friend)
but after inserting the function code into the while true loop
distracted_chieftan = False
pos1 = Vector(53,50)
pos2 = Vector(32,50)
while True:
dodge()
friend = hero.findByType("paladin")[0]
if not distracted_chieftan:
hero.command(friend, "move", pos1)
if friend.distanceTo(pos1) == 0:
distracted_chieftan = True
if distracted_chieftan:
hero.command(friend, "move", pos2)
the code worked
What is your solution? Why using this function doesn’t work?
I solved it. Here’s my code:
def findEnemy(id):
for enemy in hero.findEnemies():
if enemy.id == id:
return enemy
return None
dis = False
def commandPaladinStage1(friend):
if not dis:
hero.command(friend, "move", Vector(53,50))
cheiftain = findEnemy("Oniko")
if cheiftain and cheiftain.target == friend:
dis = True
if dis:
hero.command(friend, "move", Vector(37,41))
def almostEqual(a, b):
return a-4 < b < a+4
def almostEqual2(a, b):
return a-0.6 < b < a+0.6
def dodge():
missles = hero.findEnemyMissiles()
if len(missles) != 0:
missle = hero.findNearest(missles)
if missle:
distance = hero.distanceTo(missle)
if distance < 6:
if almostEqual(hero.pos.y, 14):
hero.moveXY(hero.pos.x, hero.pos.y-8)
elif almostEqual(hero.pos.y, 6):
hero.moveXY(hero.pos.x, hero.pos.y+8)
stage = 1
while True:
dodge()
if stage == 1:
paladin = hero.findByType("paladin")[0]
commandPaladinStage1(paladin)
if len(hero.findByType("chieftain")) == 0:
stage = 2
I haven’t completed it yet but I hope I will.
system
Closed
March 28, 2021, 2:37pm
9
This topic was automatically closed 12 hours after the last reply. New replies are no longer allowed.