[Solved]on_removed() warning issue?

Started by Zefk, July 28, 2018, 12:48:17 AM

Previous topic - Next topic
July 28, 2018, 12:48:17 AM Last Edit: July 28, 2018, 07:20:39 PM by Zefk
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.)
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


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

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




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."

@Diarandor
Ah, I get it now. Thanks for clarifying Diarandor.

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