Solarus Forum

Solarus => Bugs & Feature requests => Topic started by: Zefk on July 28, 2018, 12:48:17 am

Title: [Solved]on_removed() warning issue?
Post by: Zefk 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
Title: Re: on_removed() warning issue?
Post by: Max 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


Title: Re: on_removed() warning issue?
Post by: Zefk on July 28, 2018, 02:30:00 am
@Max
I think enemy:on_dead() (http://www.solarus-games.org/doc/latest/lua_api_enemy.html#lua_api_enemy_on_dead) is a better solution, but I still find it odd.
Title: Re: on_removed() warning issue?
Post by: Diarandor 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
Title: Re: [Solved]on_removed() warning issue?
Post by: Zefk 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.