Author Topic: [Solved]on_removed() warning issue?  (Read 4762 times)

0 Members and 1 Guest are viewing this topic.

Zefk

  • Hero Member
  • *****
  • Posts: 535
  • Just helping Solarus
    • View Profile
    • Zefk Design
[Solved]on_removed() warning issue?
« on: July 28, 2018, 12:48:17 AM »
To begin with, this issue does not affect the game play at all and everything works. It is just an annoying warning.

I have this code on a different map.
Code: ( lua) [Select]
  function slime:on_removed()
    bookcase:set_enabled(false)
  end

When I leave the map and go to a different map, I get a warning from the previous map: (I checked and "bookcase" does not exist on the new map.)
Code: [Select]
Error: In on_removed: [string "maps/chain_village/zark_house.lua"]:17: attempt to index global 'bookcase' (a nil value)
Please note: I did not remove the bookcase and it does the same thing when I tested it with a chest entity.

Code: ( lua) [Select]
function slime:on_removed()   
    if not chest:is_open() then
      sol.audio.play_sound("secret")
    end
 end

Code: [Select]
Error: In on_removed: [string "maps/chain_village/zark_house.lua"]:21: attempt to index global 'chest' (a nil value)

I get around the warning by using a save variable.

Code: ( lua) [Select]
  function slime:on_removed()
    if not game:get_value("zark_house_enemy_defeated") == true then
      bookcase:set_enabled(false)
    end
   
    if not game:get_value("zark_house_enemy_defeated") == true then
      if not chest:is_open() then
        sol.audio.play_sound("secret")
      end
    end

    game:set_value("zark_house_enemy_defeated",true)
  end

Max

  • Sr. Member
  • ****
  • Posts: 276
    • View Profile
Re: on_removed() warning issue?
« Reply #1 on: July 28, 2018, 01:49:43 AM »
I've had this one too. When you're going to a new map, every entity on the old map is removed, because the old map doesn't exist anymore. If you define entity:on_removed() for any map entity, it'll be called when you change maps.

I don't know what you're calling on removed for, but it looks like you want the book case to deactivate when the slime is killed? Maybe use slime:on_dead() instead.

Or, you could do
Slime:on_removed
If map:has_entity(bookcase)
Then remove bookcase



Zefk

  • Hero Member
  • *****
  • Posts: 535
  • Just helping Solarus
    • View Profile
    • Zefk Design
Re: on_removed() warning issue?
« Reply #2 on: July 28, 2018, 02:30:00 AM »
@Max
I think enemy:on_dead() is a better solution, but I still find it odd.

Diarandor

  • Hero Member
  • *****
  • Posts: 1062
  • Cats are cool! (ΦωΦ)
    • View Profile
Re: on_removed() warning issue?
« Reply #3 on: July 28, 2018, 12:52:00 PM »
You should check if the entity still exists. In on_removed:
Code: (Lua) [Select]
if bookcase ~= nil and bookcase:exists() then
  bookcase:set_enabled(false)
end
“If you make people think they're thinking, they'll love you. But if you really make them think, they'll hate you.”

Zefk

  • Hero Member
  • *****
  • Posts: 535
  • Just helping Solarus
    • View Profile
    • Zefk Design
Re: [Solved]on_removed() warning issue?
« Reply #4 on: July 28, 2018, 07:20:20 PM »
@Diarandor
Ah, I get it now. Thanks for clarifying Diarandor.

Since this is no way a bug. I will mark it as solved.