# [SOLVED] Help with Decoy Drill

``````decoysBuilt = 0
while True:
coin = hero.findNearestItem()

if coin:
# Collect the coin!
hero.moveXY(coin.pos.x, coin.pos.y);
pass
# Each decoy costs 25 gold.
# If hero.gold is greater than or equal to 25:
if hero.gold >= 25:
# buildXY a "decoy"
hero.buildXY("decoy", 36, 30)
# Add 1 to the decoysBuilt count.
decoysBuilt == decoysBuilt + 1
if decoysBuilt == 4:
# Break out of the loop when you have built 4.
break
pass

hero.say("Done building decoys!")
hero.moveXY(14, 36)
# Say how many decoys you built.
hero.say("I built 4 decoys")
``````

it keeps making more than 4 decoys and I cannot figure out how to stop it from doing so. Please help!

Dan, you defined the variable decoyBuilt for a reason. In your final statement, you are having your hero say a literal stringā¦instead, have him say the concatenation of the variable + the words to say.

so I should have him say āhero.say(DecoysBuilt)ā

``````decoysBuilt = 0
while True:
coin = hero.findNearestItem()
if coin:
hero.moveXY(coin.pos.x, coin.pos.y);
pass
if hero.gold >= 25:
hero.buildXY("decoy", 36, 30)
decoysBuilt == decoysBuilt + 1
if decoysBuilt == 4:
break
pass

hero.say("Done building decoys!")
hero.moveXY(14, 36)
hero.say("I built 4 decoys")

``````

I modified the code but it is not registering the if ādecoysBuilt == 4: statementā.

Actually, the original code was good, just one line needed to be changed, and yes, have him say thatā¦only, be careful of spelling and capitalizationā¦they count!

The new version you posted has the final statements indented so that they are now part of the preceding if blockā¦you donāt want to indent them.

can you send me a completed code to compare with because I really need to see what is going on cause I think I fixed all of it but it still builds more than 4 decoys

Sorry, no can do. Instead, copy the code from your first post in to the game editor, replacing what you now have. Then, edit the āsayā statement:

``````# Say how many decoys you built.
hero.say("I built 4 decoys")
``````

To match what you asked in the 4th reply on this topicā¦simple

should this code work?

``````decoysBuilt = 0
while True:
coin = hero.findNearestItem()
if coin:
hero.moveXY(coin.pos.x, coin.pos.y);
if hero.gold >= 25:
hero.buildXY("decoy", 36, 30)
decoysBuilt = decoysBuilt + 1
hero.say("hi" + hero.gold)
hero.say("hello" + decoysBuilt)

if decoysBuilt == 4:
hero.moveXY(14, 36)
hero.say("I built 4 decoys")

``````

Noā¦start over with the code from your original post:

``````decoysBuilt = 0
while True:
coin = hero.findNearestItem()

if coin:
# Collect the coin!
hero.moveXY(coin.pos.x, coin.pos.y);
pass
# Each decoy costs 25 gold.
# If hero.gold is greater than or equal to 25:
if hero.gold >= 25:
# buildXY a "decoy"
hero.buildXY("decoy", 36, 30)
# Add 1 to the decoysBuilt count.
decoysBuilt == decoysBuilt + 1
if decoysBuilt == 4:
# Break out of the loop when you have built 4.
break
pass

hero.say("Done building decoys!")
hero.moveXY(14, 36)
# Say how many decoys you built.
hero.say("I built 4 decoys") # and simply change this line
``````

nope it works. I just tested it

try it on your code stuff and see if that works

lolā¦I didnāt realize the question there, was still focused on your original. But yes, it works.

Yay, glad that it works for more than 1 person!

2 Likes

It doesnāt work for meā¦
Code:

``````decoysBuilt = 0
while True:
coin = hero.findNearestItem()

if coin:
# Collect the coin!
hero.moveXY(coin.pos.x, coin.pos.y);
pass
# Each decoy costs 25 gold.
# If hero.gold is greater than or equal to 25:
if hero.gold >= 25:
# buildXY a "decoy"
hero.buildXY("decoy", 36, 30)
# Add 1 to the decoysBuilt count.
decoysBuilt == decoysBuilt + 1
if decoysBuilt == 4:
# Break out of the loop when you have built 4.
break
pass

hero.say("Done building decoys!")
hero.moveXY(14, 36)
# Say how many decoys you built.
hero.say("I built 4 decoys") # and simply change this line
``````
2 Likes