Page 1 of 1

Trouble with monster locations and if statements

Posted: Fri Jun 07, 2013 6:32 pm
by Ulfsark
Hey guys, I am working on a puzzle where the player must use teleprompters to switch the locations of monsters in 3 cells and arrange them in the correct order.
Correctly organizing the creatures should allow for a door to open. However I am having trouble accessing the x,y coordinates of the creates and using them effectively in an if statement. I have scoured the forums and modding pages and have yet to find a soulution.

Basically what I need is something that if all 3 monsters are in the correct location, the door opens.

Thank you very much for your help, this modding community is awesome, there are so many good resources everywhere, sadly I am still not able to figure this out even using them :p

Thanks!
-Ulfsark

Re: Trouble with monster locations and if statements

Posted: Fri Jun 07, 2013 7:12 pm
by Ryeath_Greystalk
I think there are a couple ways you could go about this. If you are just using generic monsters id's then you would probably want to use a entitiesAt() to check and see if the monsters are in the right order. Something like

Code: Select all

local monster1 = false
local monster2 = false

for i in entitesAt(x,y)
    if i.name == "snail" then 
         monster1 = true
    end
end
for i in entitesAt(x,y)
    if i.name == "spider" then
          monster2 = true
    end
end

if monster1 and monster2 then
    secret_door_one:open()
end
That is incomplete code but should give you an idea.

If you want to us the monster x,y then you need to use the id, which is why I use custom names when I need to use x,y. Something like,

Code: Select all

local monster1 = false
local monster2 = false

if test_snail_one.x == 15 and test_snail_one.y == 22 then
    monster1 = true
end
if test_spider_one.x == 16 and test_spider_one.y == 22 then
   monster2 = true
end

if monster1 and monster2 then
     super_secret_spidey_door:open()
end
(again incomplete but an idea)

Expect Komag to appear shortly and show you how to do it in about 3 lines. His uber ninja coding skills are awesome.

Good luck with the project.

Re: Trouble with monster locations and if statements

Posted: Fri Jun 07, 2013 8:33 pm
by Komag
actually Ryeath_Greystalk's solutions would be fine I think, since you only have three things. It could possibly be crunched down, but not easily and wouldn't reduce it much.

Also, you could use the first version with ids if you wanted to, not just names.

Code: Select all

for i in entitesAt(x,y)
    if i.id == "test_snail_one" then 
         monster1 = true
    end
end

Re: Trouble with monster locations and if statements

Posted: Fri Jun 07, 2013 8:50 pm
by Ulfsark
You guys are awesome. Thank you very much for your help.

Re: Trouble with monster locations and if statements

Posted: Sat Jun 08, 2013 12:44 am
by JohnWordsworth
Just a random suggestion for a minor improvement to make your dungeon a bit more robust going forward, instead of hard-coding the coordinates in your script like this...

Code: Select all

if ( test_snail_one.x == 24 and test_snail_one.y == 15 ) then
   ...
end
You might want to store these as variables at the top of the script, like so...

Code: Select all

snail_one_x = 24;
snail_one_y = 15;

if ( test_snail_one.x == snail_one_target_x and test_snail_one.y == snail_one_target_y ) then
  ...
end
Even better perhaps, you could actually put down some hidden pressure plates as the targets, and completely turn off all of the "triggered by" options for the pressure plates. So, in the square you would like the snail to be, put a pressure plate with ID plate_snail_target and use the following:

Code: Select all

if ( test_snail_one.x == plate_snail_target.x and test_snail_one.y == plate_snail_target.y ) then
  ...
end
Obviously, these two suggestions are just a minor extension to Ryeath_Greystalk's solution, but the benefit comes that if you ever need to move this part of the dungeon to another part of the floor to make way for something else, you won't need to remember to update your script (as you will see the pressure plates on the map). Perhaps over kill, but if you have a lot of scripts like this - it's not much extra work at all and it just seems tidier than having loads of scripts with precise positions in them, which is just asking for a random bug to appear at some point!

Re: Trouble with monster locations and if statements

Posted: Sun Jun 09, 2013 4:20 pm
by Ulfsark
Hey guys, I ran into a small issue trying to implement this.

Here is my code with the error message "'do' expected near 'if'" written where it occurs in the script. I am sure it is something simple but if statements in Lua is something I am still getting used to.

Thanks in advance!

Code: Select all

	
local monster1 = false
		local monster2 = false
			local monster3 = false

for i in entitesAt(14,10)
    if i.name == "crabP" then -- 'do' expected near 'if'
         monster1 = true
			else monster1 = false
   		 end
		end
		
for i in entitesAt(16,10)
    if i.name == "herderP" then-- 'do' expected near 'if'
          monster2 = true
			else monster2 = false
  		  end
		end

for i in entitesAt(18,10)
    if i.name == "crowernP" then-- 'do' expected near 'if'
          monster3 = true
			else monster3 = false
  		  end
		end

Re: Trouble with monster locations and if statements

Posted: Sun Jun 09, 2013 4:24 pm
by Ryeath_Greystalk
just add do at the end of your for statement

for i in entitiesAt(14,10) do

the error shows up on the next line but that's just the way the debugger works

Re: Trouble with monster locations and if statements

Posted: Sun Jun 09, 2013 4:29 pm
by Ulfsark
Ryeath_Greystalk wrote:just add do at the end of your for statement

for i in entitiesAt(14,10) do

the error shows up on the next line but that's just the way the debugger works
Thank you very much! I knew it was something simple :/