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.
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.)
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.
function slime:on_removed()
if not chest:is_open() then
sol.audio.play_sound("secret")
end
end
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.
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
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
@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.
You should check if the entity still exists. In on_removed:
if bookcase ~= nil and bookcase:exists() then
bookcase:set_enabled(false)
end
@Diarandor
Ah, I get it now. Thanks for clarifying Diarandor.
Since this is no way a bug. I will mark it as solved.