Fix load-crash if _magnet_timer of item entity is uninizialized
[MineClone/MineClone2.git] / mods / ENTITIES / mcl_void_damage / init.lua
blobf8f4578f9d7773e1c5763c440e0b5a3e763cd541
1 local voidtimer = 0
3 minetest.register_globalstep(function(dtime)
4 voidtimer = voidtimer + dtime
5 if voidtimer > 0.5 then
6 voidtimer = 0
7 local objs = minetest.object_refs
8 local enable_damage = minetest.settings:get_bool("enable_damage")
9 for id, obj in pairs(objs) do
10 local pos = obj:get_pos()
11 local void, void_deadly = mcl_worlds.is_in_void(pos)
12 if void_deadly then
13 local is_player = obj:is_player()
14 local ent = obj:get_luaentity()
15 local immortal_val = obj:get_armor_groups().immortal
16 local is_immortal = false
17 if immortal_val and immortal_val > 0 then
18 is_immortal = true
19 end
20 if is_immortal or not enable_damage then
21 if is_player then
22 -- If damage is disabled, we can't kill players.
23 -- So we just teleport the player back to spawn.
24 local spawn = mcl_spawn.get_spawn_pos(obj)
25 obj:set_pos(spawn)
26 mcl_worlds.dimension_change(obj, mcl_worlds.pos_to_dimension(spawn))
27 minetest.chat_send_player(obj:get_player_name(), "The void is off-limits to you!")
28 else
29 obj:remove()
30 end
31 elseif enable_damage and not is_immortal then
32 -- Damage enabled, not immortal: Deal void damage (4 HP / 0.5 seconds)
33 if obj:get_hp() > 0 then
34 if is_player then
35 mcl_death_messages.player_damage(obj, string.format("%s fell into the endless void.", obj:get_player_name()))
36 end
37 obj:set_hp(obj:get_hp() - 4)
38 end
39 end
40 end
41 end
42 end
43 end)