From 5d48fbcfee86ffb012ac28d01bd63f4068be3056 Mon Sep 17 00:00:00 2001 From: sapier Date: Sun, 26 May 2013 13:35:33 +0200 Subject: [PATCH] Removed env reference Added support for animation speed changing (requires core patch) --- barn/init.lua | 16 +- mobf/attention.lua | 2 +- mobf/compatibility.lua | 16 +- mobf/debug.lua | 11 +- mobf/environment.lua | 12 +- mobf/fighting.lua | 12 +- mobf/graphics.lua | 116 +- mobf/init.lua | 11 +- mobf/lifebar.lua | 2 +- .../mgen_jordan4ibanez/mgen_jordan4ibanez.lua | 10 +- mobf/mgen_pathbased/main.lua | 22 +- mobf/mgen_probab/direction_control.lua | 2 +- mobf/mgen_probab/main_probab.lua | 2 +- mobf/mgen_rasterized/mgen_raster.lua | 2 +- mobf/mob_state.lua | 2 +- mobf/mobf.lua | 8 +- mobf/movement_generic.lua | 2 +- mobf/path.lua | 4 +- mobf/random_drop.lua | 2 +- mobf/spawn_algorithms/at_night.lua | 28 +- mobf/spawn_algorithms/big_willow.lua | 4 +- mobf/spawn_algorithms/deep_large_caves.lua | 10 +- mobf/spawn_algorithms/forrest.lua | 10 +- mobf/spawn_algorithms/in_air1.lua | 6 +- mobf/spawn_algorithms/in_shallow_water.lua | 16 +- mobf/spawn_algorithms/shadows.lua | 14 +- mobf/spawn_algorithms/willow.lua | 4 +- mobf/spawning.lua | 4 +- mobf/utils/error_handling.lua | 29 + mobf/utils/generic_functions.lua | 83 +- mobf/weapons.lua | 32 +- mobf_settings/init.lua | 1131 ++++++++--------- mobf_settings/init_old.lua | 653 ++++++++++ trap/init.lua | 6 +- 34 files changed, 1495 insertions(+), 789 deletions(-) create mode 100644 mobf/utils/error_handling.lua create mode 100644 mobf_settings/init_old.lua diff --git a/barn/init.lua b/barn/init.lua index 48cfa80..1427509 100644 --- a/barn/init.lua +++ b/barn/init.lua @@ -37,7 +37,7 @@ minetest.register_craftitem("barn:barn_empty", { if pointed_thing.type == "node" then local pos = pointed_thing.above - local newobject = minetest.env:add_entity(pos,"barn:barn_empty_ent") + local newobject = minetest.add_entity(pos,"barn:barn_empty_ent") item:take_item() @@ -53,7 +53,7 @@ minetest.register_craftitem("barn:barn_small_empty", { if pointed_thing.type == "node" then local pos = pointed_thing.above - local newobject = minetest.env:add_entity(pos,"barn:barn_small_empty_ent") + local newobject = minetest.add_entity(pos,"barn:barn_small_empty_ent") item:take_item() @@ -95,7 +95,7 @@ end function breed(breedpairs,self,now) local pos = self.object:getpos() - local objectlist = minetest.env:get_objects_inside_radius(pos,2) + local objectlist = minetest.get_objects_inside_radius(pos,2) local le_animal1 = nil local le_animal2 = nil @@ -150,7 +150,7 @@ function breed(breedpairs,self,now) local result = breedpairs[math.random(3,4)] - local breeded = minetest.env:add_entity(pos_to_breed ,result .. "__default") + local breeded = minetest.add_entity(pos_to_breed ,result .. "__default") local breeded_lua = breeded:get_luaentity() breeded_lua.dynamic_data.spawning.player_spawned = true @@ -188,7 +188,7 @@ minetest.register_entity(":barn:barn_ent", --remove barn and add empty one self.object:remove() - local barn_empty = minetest.env:add_entity(pos,"barn:barn_empty_ent") + local barn_empty = minetest.add_entity(pos,"barn:barn_empty_ent") local barn_empty_lua = barn_empty:get_luaentity() barn_empty_lua.last_breed_time = now end @@ -239,7 +239,7 @@ minetest.register_entity(":barn:barn_empty_ent", self.object:remove() - local barn = minetest.env:add_entity(pos,"barn:barn_ent") + local barn = minetest.add_entity(pos,"barn:barn_ent") local barn_lua = barn:get_luaentity() @@ -286,7 +286,7 @@ minetest.register_entity(":barn:barn_small_ent", --remove barn and add empty one self.object:remove() - local barn_empty = minetest.env:add_entity(pos,"barn:barn_small_empty_ent") + local barn_empty = minetest.add_entity(pos,"barn:barn_small_empty_ent") local barn_empty_lua = barn_empty:get_luaentity() barn_empty_lua.last_breed_time = now end @@ -337,7 +337,7 @@ minetest.register_entity(":barn:barn_small_empty_ent", self.object:remove() - local barn = minetest.env:add_entity(pos,"barn:barn_small_ent") + local barn = minetest.add_entity(pos,"barn:barn_small_ent") local barn_lua = barn:get_luaentity() diff --git a/mobf/attention.lua b/mobf/attention.lua index f0daf48..8896361 100644 --- a/mobf/attention.lua +++ b/mobf/attention.lua @@ -141,7 +141,7 @@ function attention.callback(entity,now) --get list of all objects in attention range local objectlist = - minetest.env:get_objects_inside_radius(own_pos,attention_distance) + minetest.get_objects_inside_radius(own_pos,attention_distance) if #objectlist > 0 then for i = 1 , #objectlist, 1 do diff --git a/mobf/compatibility.lua b/mobf/compatibility.lua index 6dadcbf..d849c6c 100644 --- a/mobf/compatibility.lua +++ b/mobf/compatibility.lua @@ -20,8 +20,8 @@ minetest.register_abm({ chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) - minetest.env:remove_node(pos) - minetest.env:add_node(pos,{name="wool:white"}) + minetest.remove_node(pos) + minetest.add_node(pos,{name="wool:white"}) end }) @@ -32,8 +32,8 @@ minetest.register_abm({ chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) - minetest.env:remove_node(pos) - minetest.env:add_node(pos,{name="wool:grey"}) + minetest.remove_node(pos) + minetest.add_node(pos,{name="wool:grey"}) end }) @@ -44,8 +44,8 @@ minetest.register_abm({ chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) - minetest.env:remove_node(pos) - minetest.env:add_node(pos,{name="wool:brown"}) + minetest.remove_node(pos) + minetest.add_node(pos,{name="wool:brown"}) end }) @@ -56,8 +56,8 @@ minetest.register_abm({ chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) - minetest.env:remove_node(pos) - minetest.env:add_node(pos,{name="wool:black"}) + minetest.remove_node(pos) + minetest.add_node(pos,{name="wool:black"}) end }) diff --git a/mobf/debug.lua b/mobf/debug.lua index f87cf27..c0176f6 100644 --- a/mobf/debug.lua +++ b/mobf/debug.lua @@ -108,7 +108,7 @@ function mobf_debug.spawn_mob(name,param) else --todo find random pos - local player = minetest.env:get_player_by_name(name) + local player = minetest.get_player_by_name(name) if player == nil then @@ -220,7 +220,7 @@ end --! @param param parameters received ------------------------------------------------------------------------------ function mobf_debug.add_tools(name,param) - local player = minetest.env:get_player_by_name(name) + local player = minetest.get_player_by_name(name) if player ~= nil then player:get_inventory():add_item("main", "animalmaterials:lasso 20") @@ -378,7 +378,7 @@ function mobf_debug.rightclick_callback(entity,player) print("MOBF: \t\tpath: " .. dump(entity.dynamic_data.p_movement.path)) if entity.dynamic_data.p_movement.path ~= nil then for i,v in ipairs(entity.dynamic_data.p_movement.path) do - local objects = minetest.env:get_objects_inside_radius(v,0.5) + local objects = minetest.get_objects_inside_radius(v,0.5) local found = false; for i=1,#objects,1 do local luaentity = objects[i]:get_luaentity() @@ -389,7 +389,7 @@ function mobf_debug.rightclick_callback(entity,player) end end - local node_at = minetest.env:get_node(v) + local node_at = minetest.get_node(v) if not found and node_at.name ~= nil and @@ -426,6 +426,9 @@ function mobf_debug.rightclick_callback(entity,player) print("MOBF: \t\t " .. k .. ": " .. v.value) end end + if entity.dynamic_data.graphics.last_fps ~= nil then + print("MOBF: Animating with: " .. entity.dynamic_data.graphics.last_fps .. " fps") + end return false end diff --git a/mobf/environment.lua b/mobf/environment.lua index 387921d..084e8de 100644 --- a/mobf/environment.lua +++ b/mobf/environment.lua @@ -199,7 +199,7 @@ end ------------------------------------------------------------------------------ function environment.get_absolute_min_max_pos(env,pos) - local node = minetest.env:get_node(pos) + local node = minetest.get_node(pos) --if is not within environment it should be return current position --as min max @@ -277,7 +277,7 @@ function environment.checksurface(pos,surface) local pos_below = {x=pos.x,y=pos.y-1,z=pos.z} - local node_below = minetest.env:get_node(pos_below) + local node_below = minetest.get_node(pos_below) if node_below == nil then @@ -374,7 +374,7 @@ function environment.pos_is_ok(pos,entity,dont_do_jumpcheck) --check if mob at pos will be in correct environment for i=1,#cornerpositions,1 do if not mobf_pos_is_same(lastpos,cornerpositions[i]) then - local node_to_check = minetest.env:get_node(cornerpositions[i]) + local node_to_check = minetest.get_node(cornerpositions[i]) if node_to_check == nil then mobf_bug_warning(LOGLEVEL_ERROR,"MOBF: BUG!!!! checking position with invalid node") @@ -482,7 +482,7 @@ function environment.get_default_gravity(pos,media,canfly) return nil end - local node = minetest.env:get_node(pos) + local node = minetest.get_node(pos) --if an mob can't fly or isn't within it's medium default acceleration -- for it's current medium is applied @@ -527,10 +527,10 @@ function environment.fix_base_pos(entity, center_to_bottom) local pos = entity.object:getpos() - local node_pos = minetest.env:get_node(pos) + local node_pos = minetest.get_node(pos) local pos_to_check = {x=pos.x,y=pos.y-center_to_bottom+0.1,z=pos.z} - local node_pos_check = minetest.env:get_node(pos_to_check) + local node_pos_check = minetest.get_node(pos_to_check) if node_pos ~= nil and node_pos_check ~= nil then diff --git a/mobf/fighting.lua b/mobf/fighting.lua index 22fa91c..0048c6c 100644 --- a/mobf/fighting.lua +++ b/mobf/fighting.lua @@ -190,7 +190,7 @@ function fighting.hit(entity,attacker) end else --todo check if spawning a stack is possible - minetest.env:add_item(mob_pos,result) + minetest.add_item(mob_pos,result) end spawning.remove(entity, "killed") else @@ -633,7 +633,7 @@ function fighting.get_target(entity) range = entity.data.combat.distance.range end - local objectlist = minetest.env:get_objects_inside_radius( + local objectlist = minetest.get_objects_inside_radius( entity.object:getpos(),range) local count = 0 @@ -796,10 +796,10 @@ function fighting.self_destruct_handler(entity,now) for k=pos.z-entity.data.combat.self_destruct.range/2, pos.z+entity.data.combat.self_destruct.range/2, 1 do - local current = minetest.env:get_node({x=i,y=j,z=k}) + local current = minetest.get_node({x=i,y=j,z=k}) if (current.name == "air") then - minetest.env:set_node({x=i,y=j,z=k}, + minetest.set_node({x=i,y=j,z=k}, {name="fire:basic_flame"}) end @@ -944,7 +944,7 @@ function fighting.distance_attack_handler(entity,targetpos,mob_pos,now,distance) sound.play(mob_pos,entity.data.sound.distance); end - local newobject=minetest.env:add_entity({ x=mob_pos.x+dir.x, + local newobject=minetest.add_entity({ x=mob_pos.x+dir.x, y=mob_pos.y+dir.y+1, z=mob_pos.z+dir.z }, @@ -1022,7 +1022,7 @@ function fighting.sun_damage_handler(entity,now) local pos = entity.object:getpos() local current_state = mob_state.get_state_by_name(entity, entity.dynamic_data.state.current) - local current_light = minetest.env:get_node_light(pos) + local current_light = minetest.get_node_light(pos) if current_light == nil then minetest.log(LOGLEVEL_ERROR,"MOBF: Bug!!! didn't get a light value for " diff --git a/mobf/graphics.lua b/mobf/graphics.lua index b775afa..5a70786 100644 --- a/mobf/graphics.lua +++ b/mobf/graphics.lua @@ -18,6 +18,22 @@ --! @brief graphic features graphics = {} +------------------------------------------------------------------------------- +-- name: init_dynamic_data(entity,velocity) +-- +--! @brief initialize values required by graphics +--! @memberof graphics +-- +--! @param entity mob to calculate direction +--! @param current_velocity data to calculate direction from +------------------------------------------------------------------------------- +function graphics.init_dynamic_data(entity,now) + local data = { + last_scalar_speed = nil, + } + + entity.dynamic_data.graphics = data +end ------------------------------------------------------------------------------- -- name: update_orientation_simple(entity,velocity) -- @@ -46,7 +62,85 @@ function graphics.update_orientation_simple(entity,current_velocity) end ------------------------------------------------------------------------------- --- name: update_orientation(entity) +-- name: update(entity,now,dtime) +-- +--! @brief callback for updating graphics of mob +--! @memberof graphics +-- +--! @param entity mob to calculate direction +--! @param now current time +--! @param dtime current dtime +------------------------------------------------------------------------------- +function graphics.update(entity,now,dtime) + + --updating orientation + graphics.update_orientation(entity,now,dtime) + + + --update animation speed + graphics.update_animation(entity,now,dtime) + + --update attention + if entity.dynamic_data.attention ~= nil and + entity.data.attention ~= nil and + entity.dynamic_data.attention.current_value > + entity.data.attention.watch_threshold then + dbg_mobf.graphics_lvl3("MOBF: attention mode orientation update") + local direction = mobf_get_direction(entity.object:getpos(), + entity.dynamic_data.attention.most_relevant_target:getpos()) + + if entity.mode == "3d" then + entity.object:setyaw( + mobf_calc_yaw(direction.x,direction.z)) + else + entity.object:setyaw( + mobf_calc_yaw(direction.x,direction.z)+math.pi/2) + end + end +end + +------------------------------------------------------------------------------- +-- name: update_animation(entity,now,dtime) +-- +--! @brief callback for updating graphics of mob +--! @memberof graphics +-- +--! @param entity mob to calculate direction +--! @param now current time +--! @param dtime current dtime +------------------------------------------------------------------------------- +function graphics.update_animation(entity,now,dtime) + if entity.dynamic_data.animation ~= nil then + + local animdata = entity.data.animation[entity.dynamic_data.animation] + if animdata ~= nil and + animdata.basevelocity ~= nil then + + local current_velocity = entity.object:getvelocity() + local scalar_velocity = mobf_calc_scalar_speed(current_velocity.x,current_velocity.z) + + if entity.dynamic_data.graphics.last_scalar_speed ~= nil then + local speeddiff = + DELTA(scalar_velocity, + entity.dynamic_data.graphics.last_scalar_speed) + + if speeddiff > 0.1 then + local current_fps = scalar_velocity/animdata.basevelocity * 15 + + entity.object:set_animation_speed(current_fps) + + entity.dynamic_data.graphics.last_scalar_speed = scalar_velocity + entity.dynamic_data.graphics.last_fps = current_fps + end + else + entity.dynamic_data.graphics.last_scalar_speed = scalar_velocity + end + end + end +end + +------------------------------------------------------------------------------- +-- name: update_orientation(entity,now,dtime) -- --! @brief callback for calculating a mobs direction --! @memberof graphics @@ -111,26 +205,6 @@ function graphics.update_orientation(entity,now,dtime) end end end - - -- make mobs face a specific player - -- TODO move from dynamics data inventory to somewhere else - - if entity.dynamic_data.attention ~= nil and - entity.data.attention ~= nil and - entity.dynamic_data.attention.current_value > - entity.data.attention.watch_threshold then - dbg_mobf.graphics_lvl3("MOBF: attention mode orientation update") - local direction = mobf_get_direction(entity.object:getpos(), - entity.dynamic_data.attention.most_relevant_target:getpos()) - - if entity.mode == "3d" then - entity.object:setyaw( - mobf_calc_yaw(direction.x,direction.z)) - else - entity.object:setyaw( - mobf_calc_yaw(direction.x,direction.z)+math.pi/2) - end - end end ------------------------------------------------------------------------------- diff --git a/mobf/init.lua b/mobf/init.lua index b673656..85b2bf0 100644 --- a/mobf/init.lua +++ b/mobf/init.lua @@ -3,7 +3,7 @@ -- -- You may copy, use, modify or do nearly anything except removing this -- copyright notice. --- And of course you are NOT allow to pretend you have written it. +-- And of course you are NOT allowed to pretend you have written it. -- --! @file init.lua --! @brief main module file responsible for including all parts of mob framework mod @@ -58,8 +58,9 @@ end dofile (mobf_modpath .. "/debug_trace.lua") --include engine -dofile (mobf_modpath .. "/utils/generic_functions.lua") +dofile (mobf_modpath .. "/utils/error_handling.lua") dofile (mobf_modpath .. "/utils/settings.lua") +dofile (mobf_modpath .. "/utils/generic_functions.lua") dofile (mobf_modpath .. "/utils/data_storage.lua") dofile (mobf_modpath .. "/utils/tracing.lua") dofile (mobf_modpath .. "/utils/geometry.lua") @@ -294,9 +295,9 @@ function mobf_init_modules() --visual change hook mobf.register_on_step_callback({ - name = "update_orientation", - handler = graphics.update_orientation, - init = nil, + name = "update_graphics", + handler = graphics.update, + init = graphics.init_dynamic_data, configcheck = function(entity) return true end diff --git a/mobf/lifebar.lua b/mobf/lifebar.lua index 0ab54d5..0aef726 100644 --- a/mobf/lifebar.lua +++ b/mobf/lifebar.lua @@ -74,7 +74,7 @@ function mobf_lifebar.add(entity) local BS = 10 pos.y = pos.y + entity.collisionbox[5] + 0.1 - local lifebar = minetest.env:add_entity(pos,"mobf:lifebar") + local lifebar = minetest.add_entity(pos,"mobf:lifebar") if lifebar ~= nil then diff --git a/mobf/mgen_jordan4ibanez/mgen_jordan4ibanez.lua b/mobf/mgen_jordan4ibanez/mgen_jordan4ibanez.lua index b0750e0..024df96 100644 --- a/mobf/mgen_jordan4ibanez/mgen_jordan4ibanez.lua +++ b/mobf/mgen_jordan4ibanez/mgen_jordan4ibanez.lua @@ -73,18 +73,18 @@ function mgen_jordan4ibanez.callback(entity,now) --open a door [alpha] if entity.dynamic_data.movement.direction ~= nil then if entity.dynamic_data.movement.door_timer > 2 then - local is_a_door = minetest.env:get_node({x=entity.object:getpos().x + entity.dynamic_data.movement.direction.x, + local is_a_door = minetest.get_node({x=entity.object:getpos().x + entity.dynamic_data.movement.direction.x, y=entity.object:getpos().y,z=entity.object:getpos(). z + entity.dynamic_data.movement.direction.z}).name if is_a_door == "doors:door_wood_t_1" then - minetest.env:punch_node({x=entity.object:getpos().x + entity.dynamic_data.movement.direction.x, + minetest.punch_node({x=entity.object:getpos().x + entity.dynamic_data.movement.direction.x, y=entity.object:getpos().y-1, z=entity.object:getpos().z + entity.dynamic_data.movement.direction.z}) entity.dynamic_data.movement.door_timer = 0 end - local is_in_door = minetest.env:get_node(entity.object:getpos()).name + local is_in_door = minetest.get_node(entity.object:getpos()).name if is_in_door == "doors:door_wood_t_1" then - minetest.env:punch_node(entity.object:getpos()) + minetest.punch_node(entity.object:getpos()) end end end @@ -92,7 +92,7 @@ function mgen_jordan4ibanez.callback(entity,now) --jump if entity.dynamic_data.movement.direction ~= nil then if entity.dynamic_data.movement.jump_timer > 0.3 then - if minetest.registered_nodes[minetest.env:get_node({x=entity.object:getpos().x + entity.dynamic_data.movement.direction.x, + if minetest.registered_nodes[minetest.get_node({x=entity.object:getpos().x + entity.dynamic_data.movement.direction.x, y=entity.object:getpos().y-1, z=entity.object:getpos().z + entity.dynamic_data.movement.direction.z}).name].walkable then entity.object:setvelocity({x=entity.object:getvelocity().x,y=5,z=entity.object:getvelocity().z}) diff --git a/mobf/mgen_pathbased/main.lua b/mobf/mgen_pathbased/main.lua index 1b99a71..461b2fa 100644 --- a/mobf/mgen_pathbased/main.lua +++ b/mobf/mgen_pathbased/main.lua @@ -242,20 +242,18 @@ function p_mov_gen.set_target(entity,target) entity.dynamic_data.movement.max_distance = 0.5 --try to find path on our own - if type(minetest.env.find_path) == "function" then - print("trying to find path to: " .. printpos(targetpos)) - entity.dynamic_data.p_movement.path = - minetest.env:find_path(current_pos,targetpos,5,1,1,nil) - - if entity.dynamic_data.p_movement.path ~= nil then + entity.dynamic_data.p_movement.path = + minetest.find_path(current_pos,targetpos,5,1,1,nil) + + if entity.dynamic_data.p_movement.path ~= nil then - --a valid path has at least 2 positions - mobf_assert_backtrace(#entity.dynamic_data.p_movement.path > 1) - entity.dynamic_data.movement.target = - entity.dynamic_data.p_movement.path[2] - return true - end + --a valid path has at least 2 positions + mobf_assert_backtrace(#entity.dynamic_data.p_movement.path > 1) + entity.dynamic_data.movement.target = + entity.dynamic_data.p_movement.path[2] + return true end + if entity.dynamic_data.p_movement.path == nil then print( diff --git a/mobf/mgen_probab/direction_control.lua b/mobf/mgen_probab/direction_control.lua index 7548ccc..6deaf02 100644 --- a/mobf/mgen_probab/direction_control.lua +++ b/mobf/mgen_probab/direction_control.lua @@ -250,7 +250,7 @@ function direction_control.precheck_movement(entity,movement_state,pos_predicted dbg_mobf.movement_lvl1("mob is about to collide") if environment.pos_is_ok({x=pos_predicted.x,y=pos_predicted.y+1,z=pos_predicted.z},entity) == "ok" then if math.random() < ( entity.dynamic_data.movement.mpattern.jump_up * PER_SECOND_CORRECTION_FACTOR) then - local node_at_predicted_pos = minetest.env:get_node(pos_predicted) + local node_at_predicted_pos = minetest.get_node(pos_predicted) dbg_mobf.pmovement_lvl2("MOBF: velocity is:" .. printpos(movement_state.current_velocity) .. " position is: "..printpos(pos) ) dbg_mobf.pmovement_lvl2("MOBF: estimated position was: "..printpos(pos_predicted)) dbg_mobf.pmovement_lvl2("MOBF: predicted node state is: " .. environment.pos_is_ok(pos_predicted,entity)) diff --git a/mobf/mgen_probab/main_probab.lua b/mobf/mgen_probab/main_probab.lua index 753942e..224c425 100644 --- a/mobf/mgen_probab/main_probab.lua +++ b/mobf/mgen_probab/main_probab.lua @@ -556,7 +556,7 @@ function movement_gen.fix_current_pos(entity,movement_state) if current_state == "collision" then local current_pos = mobf_round_pos(movement_state.basepos); - local current_node = minetest.env:get_node( current_pos ); + local current_node = minetest.get_node( current_pos ); local walkable = false if minetest.registered_nodes[current_node.name] then diff --git a/mobf/mgen_rasterized/mgen_raster.lua b/mobf/mgen_rasterized/mgen_raster.lua index f17170f..42c5193 100644 --- a/mobf/mgen_rasterized/mgen_raster.lua +++ b/mobf/mgen_rasterized/mgen_raster.lua @@ -182,7 +182,7 @@ function mgen_raster.onground(entity,now,basepos) local fp = { x= posbelow.x + (0.5*dx), y= posbelow.y, z= posbelow.z + (0.5*dz) } - local n = minetest.env:get_node(fp) + local n = minetest.get_node(fp) if mobf_is_walkable(n) then return true end diff --git a/mobf/mob_state.lua b/mobf/mob_state.lua index 717596e..1a2307d 100644 --- a/mobf/mob_state.lua +++ b/mobf/mob_state.lua @@ -539,7 +539,7 @@ function mob_state.prepare_states(mob) local pos = self.object:getpos() self.object:remove() - minetest.env:add_entity(pos,self.new_name) + minetest.add_entity(pos,self.new_name) end }) diff --git a/mobf/mobf.lua b/mobf/mobf.lua index 4e49d69..68b8276 100644 --- a/mobf/mobf.lua +++ b/mobf/mobf.lua @@ -241,7 +241,7 @@ end ------------------------------------------------------------------------------- function mobf.get_basepos(entity) local pos = entity.object:getpos() - local nodeatpos = minetest.env:get_node(pos) + local nodeatpos = minetest.get_node(pos) dbg_mobf.mobf_core_helper_lvl3("MOBF: " .. entity.data.name .. " Center Position: " .. printpos(pos) .. " is: " .. nodeatpos.name) @@ -254,7 +254,7 @@ function mobf.get_basepos(entity) .. entity.collisionbox[2]) end - nodeatpos = minetest.env:get_node(pos) + nodeatpos = minetest.get_node(pos) dbg_mobf.mobf_core_helper_lvl3("MOBF: Base Position: " .. printpos(pos) .. " is: " .. nodeatpos.name) @@ -280,7 +280,7 @@ function mobf.activate_handler(self,staticdata) if pos == nil then minetest.log(LOGLEVEL_ERROR,"MOBF: mob at nil pos!") end - local current_node = minetest.env:get_node(pos) + local current_node = minetest.get_node(pos) if current_node == nil then @@ -589,7 +589,7 @@ function mobf.register_entity(name, graphics, mob) local fp = { x= posbelow.x + (0.5*dx), y= posbelow.y, z= posbelow.z + (0.5*dz) } - local n = minetest.env:get_node(fp) + local n = minetest.get_node(fp) if not mobf_is_walkable(n) then return true end diff --git a/mobf/movement_generic.lua b/mobf/movement_generic.lua index f8dcff0..78b2cba 100644 --- a/mobf/movement_generic.lua +++ b/mobf/movement_generic.lua @@ -39,7 +39,7 @@ function movement_generic.get_accel_to(new_pos,entity) end local old_pos = entity.object:getpos() - local node = minetest.env:get_node(old_pos) + local node = minetest.get_node(old_pos) local maxaccel = entity.data.movement.max_accel local minaccel = entity.data.movement.min_accel diff --git a/mobf/path.lua b/mobf/path.lua index d9e91a1..f03ac30 100644 --- a/mobf/path.lua +++ b/mobf/path.lua @@ -328,7 +328,7 @@ function mobf_path.button_handler(player, formname, fields) if data.buttonid == "show_points" then for i,v in ipairs(mobf_rtd.path_data.users[data.ownername].paths[data.pathname].points) do - local objects = minetest.env:get_objects_inside_radius(v,0.5) + local objects = minetest.get_objects_inside_radius(v,0.5) dbg_mobf.path_lvl3("MOBF: got " .. #objects .. " around pos checking for marker") @@ -342,7 +342,7 @@ function mobf_path.button_handler(player, formname, fields) end end - local node_at = minetest.env:get_node(v) + local node_at = minetest.get_node(v) if not found and node_at.name ~= nil and diff --git a/mobf/random_drop.lua b/mobf/random_drop.lua index 3864d88..944217f 100644 --- a/mobf/random_drop.lua +++ b/mobf/random_drop.lua @@ -54,7 +54,7 @@ function random_drop.callback(entity,now) local toput = environment.get_suitable_pos_same_level(entitybasepos,1,entity) if toput ~= nil then - minetest.env:add_entity(toput,entity.data.random_drop.result.."_ent") + minetest.add_entity(toput,entity.data.random_drop.result.."_ent") dbg_mobf.random_drop_lvl3("MOBF: adding random drop for "..entity.data.name .. ": "..entity.data.random_drop.result.."_ent" .. " at " .. printpos(toput)) if entity.data.sound ~= nil then sound.play(entitybasepos,entity.data.sound.random_drop) diff --git a/mobf/spawn_algorithms/at_night.lua b/mobf/spawn_algorithms/at_night.lua index 6acb638..5d4248c 100644 --- a/mobf/spawn_algorithms/at_night.lua +++ b/mobf/spawn_algorithms/at_night.lua @@ -46,7 +46,7 @@ function mobf_spawn_at_night(mob_name,mob_transform,spawning_data,environment) chance = math.floor(1/spawning_data.rate), action = function(pos, node, active_object_count, active_object_count_wider) - local gametime = minetest.env:get_timeofday() + local gametime = minetest.get_timeofday() if gametime > 0.25 and gametime < 0.75 then @@ -73,7 +73,7 @@ function mobf_spawn_at_night(mob_name,mob_transform,spawning_data,environment) return end - local gametime = minetest.env:get_timeofday() + local gametime = minetest.get_timeofday() if gametime > 0.25 and gametime < 0.75 then @@ -81,7 +81,7 @@ function mobf_spawn_at_night(mob_name,mob_transform,spawning_data,environment) end - local node_above = minetest.env:get_node(pos_above) + local node_above = minetest.get_node(pos_above) if mob_name == nil then @@ -89,9 +89,9 @@ function mobf_spawn_at_night(mob_name,mob_transform,spawning_data,environment) else --print("Find mobs of same type around:"..mob_name.. " pop dens: ".. population_density) if mobf_mob_around(mob_name,mob_transform,pos,spawning_data.density,true) == 0 then - if minetest.env:get_node_light(pos_above,0.5) == LIGHT_MAX +1 and - minetest.env:get_node_light(pos_above,0.0) < 7 and - minetest.env:get_node_light(pos_above) < 6 then + if minetest.get_node_light(pos_above,0.5) == LIGHT_MAX +1 and + minetest.get_node_light(pos_above,0.0) < 7 and + minetest.get_node_light(pos_above) < 6 then local entity = spawning.spawn_and_check(mob_name,"__default",pos_above,"at_night_spawner") @@ -125,7 +125,7 @@ function mobf_spawn_at_night_entity(mob_name,mob_transform,spawning_data,environ spawning.register_spawner_entity(mob_name,mob_transform,spawning_data,environment, function(self) - local gametime = minetest.env:get_timeofday() + local gametime = minetest.get_timeofday() if gametime > 0.25 and gametime < 0.75 then @@ -161,7 +161,7 @@ function mobf_spawn_at_night_entity(mob_name,mob_transform,spawning_data,environ --check if own position is good local pos_below = {x=newpos.x,y=newpos.y-1,z=newpos.z} - local node_below = minetest.env:get_node(pos_below) + local node_below = minetest.get_node(pos_below) if good and not mobf_contains(at_night_surfaces,node_below.name) then reason = "wrong surface" @@ -174,8 +174,8 @@ function mobf_spawn_at_night_entity(mob_name,mob_transform,spawning_data,environ good = false end - local light_day = minetest.env:get_node_light(newpos,0.5) - local light_midnight = minetest.env:get_node_light(newpos,0.0) + local light_day = minetest.get_node_light(newpos,0.5) + local light_midnight = minetest.get_node_light(newpos,0.0) --check if area is in day/night cycle if good and (light_day ~= LIGHT_MAX +1 or @@ -197,7 +197,7 @@ function mobf_spawn_at_night_entity(mob_name,mob_transform,spawning_data,environ --check if current light is dark enough - if minetest.env:get_node_light(pos) > 6 then + if minetest.get_node_light(pos) > 6 then self.spawner_time_passed = self.spawner_mob_spawndata.respawndelay self.spawner_last_result = "at_night: to much light" return @@ -238,7 +238,7 @@ function mobf_spawn_at_night_entity(mob_name,mob_transform,spawning_data,environ if surface then pos.y= surface -1 - local node = minetest.env:get_node(pos) + local node = minetest.get_node(pos) if not mobf_contains(at_night_surfaces,node.name) then dbg_mobf.spawning_lvl3("MOBF: node ain't of correct type: " .. node.name) @@ -246,13 +246,13 @@ function mobf_spawn_at_night_entity(mob_name,mob_transform,spawning_data,environ end local pos_above = {x=pos.x,y=pos.y+1,z=pos.z} - local node_above = minetest.env:get_node(pos_above) + local node_above = minetest.get_node(pos_above) if not mobf_contains({"air"},node_above.name) then dbg_mobf.spawning_lvl3("MOBF: node above ain't air but: " .. node_above.name) return false end - local light_day = minetest.env:get_node_light(pos_above,0.5) + local light_day = minetest.get_node_light(pos_above,0.5) if light_day ~= (LIGHT_MAX +1) then dbg_mobf.spawning_lvl3("MOBF: node above ain't in sunlight") diff --git a/mobf/spawn_algorithms/big_willow.lua b/mobf/spawn_algorithms/big_willow.lua index bd5c07c..872a683 100644 --- a/mobf/spawn_algorithms/big_willow.lua +++ b/mobf/spawn_algorithms/big_willow.lua @@ -71,7 +71,7 @@ function mobf_spawn_on_big_willow(mob_name,mob_transform,spawning_data,environme for x=pos.x-2,pos.x+2,1 do for z=pos.z-2,pos.z+2,1 do - local node_to_check = minetest.env:getnode({x=x,y=pos.y,z=z}) + local node_to_check = minetest.getnode({x=x,y=pos.y,z=z}) if node_to_check == nil or node_to_check.name ~= "default:dirt_with_grass" then @@ -121,7 +121,7 @@ function mobf_spawn_on_big_willow_mapgen(mob_name,mob_transform,spawning_data,en for x=pos.x-2,pos.x+2,1 do for z=pos.z-2,pos.z+2,1 do - local node_to_check = minetest.env:get_node({x=x,y=pos.y,z=z}) + local node_to_check = minetest.get_node({x=x,y=pos.y,z=z}) if node_to_check == nil or node_to_check.name ~= "default:dirt_with_grass" then pos_is_big_willow = false diff --git a/mobf/spawn_algorithms/deep_large_caves.lua b/mobf/spawn_algorithms/deep_large_caves.lua index 373ff2d..40be67b 100644 --- a/mobf/spawn_algorithms/deep_large_caves.lua +++ b/mobf/spawn_algorithms/deep_large_caves.lua @@ -72,14 +72,14 @@ function mobf_spawn_in_deep_large_caves(mob_name,mob_transform,spawning_data,env return end - local node_above = minetest.env:get_node(pos_above) + local node_above = minetest.get_node(pos_above) if mob_name == nil then minetest.log(LOGLEVEL_ERROR,"MOBF: Bug!!! mob name not available") else dbg_mobf.spawning_lvl3("MOBF: trying to spawn " .. mob_name) if mobf_mob_around(mob_name,mob_transform,pos,spawning_data.density,true) == 0 then - local newobject = minetest.env:add_entity(pos_above,mob_name .. "__default") + local newobject = minetest.add_entity(pos_above,mob_name .. "__default") local newentity = mobf_find_entity(newobject) @@ -145,7 +145,7 @@ function mobf_spawn_in_deep_large_caves_entity(mob_name,mob_transform,spawning_d if newpos.y ~= nil then --check if own position is good local pos_below = {x=newpos.x,y=newpos.y-1,z=newpos.z} - local node_below = minetest.env:get_node(pos_below) + local node_below = minetest.get_node(pos_below) if not mobf_contains({ "default:stone","default:gravel","default:dirt" },node_below.name) then @@ -225,7 +225,7 @@ function mobf_spawn_in_deep_large_caves_entity(mob_name,mob_transform,spawning_d if surface then pos.y= surface -1 - local node = minetest.env:get_node(pos) + local node = minetest.get_node(pos) if not mobf_contains({ "default:stone","default:gravel","default:dirt","default:sand" },node.name) then dbg_mobf.spawning_lvl3("MOBF: node ain't of correct type: " .. node.name) @@ -233,7 +233,7 @@ function mobf_spawn_in_deep_large_caves_entity(mob_name,mob_transform,spawning_d end local pos_above = {x=pos.x,y=pos.y+1,z=pos.z} - local node_above = minetest.env:get_node(pos_above) + local node_above = minetest.get_node(pos_above) if not mobf_contains({"air"},node_above.name) then dbg_mobf.spawning_lvl3("MOBF: node above ain't air but: " .. node_above.name) return diff --git a/mobf/spawn_algorithms/forrest.lua b/mobf/spawn_algorithms/forrest.lua index e2fe4c4..280381a 100644 --- a/mobf/spawn_algorithms/forrest.lua +++ b/mobf/spawn_algorithms/forrest.lua @@ -64,7 +64,7 @@ function mobf_spawn_in_forrest(mob_name,mob_transform,spawning_data,environment) end - local node_above = minetest.env:get_node(pos_above) + local node_above = minetest.get_node(pos_above) if mob_name == nil then minetest.log(LOGLEVEL_ERROR,"MOBF Bug!!!: mob name not available") @@ -75,10 +75,10 @@ function mobf_spawn_in_forrest(mob_name,mob_transform,spawning_data,environment) --print("Find mobs of same type around:"..mob_name.. " pop dens: ".. population_density) if mobf_mob_around(mob_name,mob_transform,pos,spawning_data.density,true) == 0 then - if minetest.env:find_node_near(pos, 3, { "default:leaves", + if minetest.find_node_near(pos, 3, { "default:leaves", "default:tree"} ) ~= nil then - local newobject = minetest.env:add_entity(pos_above,mob_name .. "__default") + local newobject = minetest.add_entity(pos_above,mob_name .. "__default") local newentity = mobf_find_entity(newobject) @@ -111,9 +111,9 @@ function mobf_spawn_in_forrest_mapgen(mob_name,mob_transform,spawning_data,envir dbg_mobf.spawning_lvl3("enough air above " ..printpos(centerpos) .. " minimum is: " .. spawning_data.height ) - if minetest.env:find_node_near(pos, 3, { "default:leaves", + if minetest.find_node_near(pos, 3, { "default:leaves", "default:tree"} ) ~= nil or - minetest.env:find_node_near(pos, 3, growing_trees_nodes ) ~= nil then + minetest.find_node_near(pos, 3, growing_trees_nodes ) ~= nil then local spawnpos = {x=pos.x,y=pos.y+1,z=pos.z} spawning.spawn_and_check(name,"__default",spawnpos,"in_forrest_mapgen") return true diff --git a/mobf/spawn_algorithms/in_air1.lua b/mobf/spawn_algorithms/in_air1.lua index 9865794..3a99dbd 100644 --- a/mobf/spawn_algorithms/in_air1.lua +++ b/mobf/spawn_algorithms/in_air1.lua @@ -51,7 +51,7 @@ function mobf_spawn_in_air1(mob_name,mob_transform,spawning_data,environment) z = pos.z } - local node_above = minetest.env:get_node(pos_above) + local node_above = minetest.get_node(pos_above) if node_above.name ~= "air" then mobf_warn_long_fct(starttime,"mobf_spawn_in_air1") @@ -65,7 +65,7 @@ function mobf_spawn_in_air1(mob_name,mob_transform,spawning_data,environment) z = pos.z } - local node_spawn = minetest.env:get_node(pos_spawn) + local node_spawn = minetest.get_node(pos_spawn) @@ -113,7 +113,7 @@ function mobf_spawn_in_air1_spawner(mob_name,mob_transform,spawning_data,environ for y=pos.y-1,pos.y+1,1 do for z=pos.z-1,pos.z+1,1 do - local node_to_check = minetest.env:get_node({x=x,y=y,z=z}) + local node_to_check = minetest.get_node({x=x,y=y,z=z}) if node_to_check == nil then good = false diff --git a/mobf/spawn_algorithms/in_shallow_water.lua b/mobf/spawn_algorithms/in_shallow_water.lua index caa6f83..cca124c 100644 --- a/mobf/spawn_algorithms/in_shallow_water.lua +++ b/mobf/spawn_algorithms/in_shallow_water.lua @@ -69,12 +69,12 @@ function mobf_spawn_in_shallow_water(mob_name,mob_transform,spawning_data,enviro else --print("Try to spawn mob: "..mob_name) - if mobf_mob_around(mob_name,mob_transform,pos,spawning_data.density,true) == 0 then + if mobf_mob_around(mob_name,mob_transform,pos,spawning_data.density,true) == 0 then - if minetest.env:find_node_near(pos, 10, {"default:dirt", - "default:dirt_with_grass"}) ~= nil then + if minetest.find_node_near(pos, 10, {"default:dirt", + "default:dirt_with_grass"}) ~= nil then - local newobject = minetest.env:add_entity(pos,mob_name .. "__default") + local newobject = minetest.add_entity(pos,mob_name .. "__default") local newentity = mobf_find_entity(newobject) @@ -115,7 +115,7 @@ function mobf_spawn_in_shallow_water_entity(mob_name,mob_transform,spawning_data dbg_mobf.spawning_lvl3("MOBF: " .. dump(self.spawner_mob_env)) --check if own position is good - local node_to_check = minetest.env:get_node(pos) + local node_to_check = minetest.get_node(pos) if node_to_check ~= nil and node_to_check.name ~= "default:water_flowing" and @@ -124,7 +124,7 @@ function mobf_spawn_in_shallow_water_entity(mob_name,mob_transform,spawning_data good = false end - local found_nodes = minetest.env:find_nodes_in_area({x=pos.x-1,y=pos.y-1,z=pos.z-1}, + local found_nodes = minetest.find_nodes_in_area({x=pos.x-1,y=pos.y-1,z=pos.z-1}, {x=pos.x+1,y=pos.y+1,z=pos.z+1}, { "default:water_flowing","default:water_source"} ) if #found_nodes < 4 then @@ -139,7 +139,7 @@ function mobf_spawn_in_shallow_water_entity(mob_name,mob_transform,spawning_data end --make sure we're near green coast - if minetest.env:find_node_near(pos, 10, + if minetest.find_node_near(pos, 10, {"default:dirt","default:dirt_with_grass"}) == nil then dbg_mobf.spawning_lvl2("MOBF: spawner " .. printpos(pos) .. " no dirt around") good = false @@ -178,7 +178,7 @@ function mobf_spawn_in_shallow_water_entity(mob_name,mob_transform,spawning_data if surface then pos.y=surface - math.random(2,10) - local node_to_check = minetest.env:get_node(pos) + local node_to_check = minetest.get_node(pos) if node_to_check ~= nil and node_to_check.name == "default:water_source" or diff --git a/mobf/spawn_algorithms/shadows.lua b/mobf/spawn_algorithms/shadows.lua index 60217bd..8aad460 100644 --- a/mobf/spawn_algorithms/shadows.lua +++ b/mobf/spawn_algorithms/shadows.lua @@ -67,7 +67,7 @@ function mobf_spawn_in_shadows(mob_name,mob_transform,spawning_data,environment) return end - local node_above = minetest.env:get_node(pos_above) + local node_above = minetest.get_node(pos_above) if mob_name == nil then minetest.log(LOGLEVEL_ERROR,"MOBF: Bug!!! mob name not available") @@ -83,7 +83,7 @@ function mobf_spawn_in_shadows(mob_name,mob_transform,spawning_data,environment) if maxlight < 3 then local newobject = - minetest.env:add_entity(pos_above,mob_name .. "__default") + minetest.add_entity(pos_above,mob_name .. "__default") local newentity = mobf_find_entity(newobject) @@ -163,7 +163,7 @@ function mobf_spawn_in_shadows_entity(mob_name,mob_transform,spawning_data,envir --check if own position is good local pos_below = {x=newpos.x,y=newpos.y-1,z=newpos.z} - local node_below = minetest.env:get_node(pos_below) + local node_below = minetest.get_node(pos_below) if not mobf_contains({ "default:stone", @@ -180,7 +180,7 @@ function mobf_spawn_in_shadows_entity(mob_name,mob_transform,spawning_data,envir end for i=0.0,1,0.1 do - local light_val = minetest.env:get_node_light(pos,i) + local light_val = minetest.get_node_light(pos,i) if light_val == nil or light_val > 6 then good = false reason = reason .. ":to much light" @@ -242,7 +242,7 @@ function mobf_spawn_in_shadows_entity(mob_name,mob_transform,spawning_data,envir if surface then pos.y= surface -1 - local node = minetest.env:get_node(pos) + local node = minetest.get_node(pos) if not mobf_contains({ "default:stone", "default:gravel", @@ -254,7 +254,7 @@ function mobf_spawn_in_shadows_entity(mob_name,mob_transform,spawning_data,envir end local pos_above = {x=pos.x,y=pos.y+1,z=pos.z} - local node_above = minetest.env:get_node(pos_above) + local node_above = minetest.get_node(pos_above) if not mobf_contains({"air"},node_above.name) then dbg_mobf.spawning_lvl3( "MOBF: node above ain't air but: " .. node_above.name) @@ -263,7 +263,7 @@ function mobf_spawn_in_shadows_entity(mob_name,mob_transform,spawning_data,envir --check if its always in shadows for i=0.0,1,0.1 do - if minetest.env:get_node_light(pos_above,i) > 6 then + if minetest.get_node_light(pos_above,i) > 6 then return false end end diff --git a/mobf/spawn_algorithms/willow.lua b/mobf/spawn_algorithms/willow.lua index 26483ff..27d9918 100644 --- a/mobf/spawn_algorithms/willow.lua +++ b/mobf/spawn_algorithms/willow.lua @@ -63,7 +63,7 @@ function mobf_spawn_on_willow(mob_name,mob_transform,spawning_data,environment) return end - local node_above = minetest.env:get_node(pos_above) + local node_above = minetest.get_node(pos_above) if mob_name == nil then mobf_bug_warning(LOGLEVEL_ERROR,"MOBF: BUG!!! mob name not available") @@ -72,7 +72,7 @@ function mobf_spawn_on_willow(mob_name,mob_transform,spawning_data,environment) if node_above.name == "air" then --print("Find mobs of same type around:"..mob_name.. " pop dens: ".. population_density) if mobf_mob_around(mob_name,mob_transform,pos,spawning_data.density,true) == 0 then - local newobject = minetest.env:add_entity(pos_above,mob_name .. "__default") + local newobject = minetest.add_entity(pos_above,mob_name .. "__default") local newentity = mobf_find_entity(newobject) diff --git a/mobf/spawning.lua b/mobf/spawning.lua index 0d1de10..2284445 100644 --- a/mobf/spawning.lua +++ b/mobf/spawning.lua @@ -257,7 +257,7 @@ function spawning.replace_entity(entity,name,preserve) --removing is done after exiting lua! spawning.remove(entity,"replaced") - local newobject = minetest.env:add_entity(pos,name) + local newobject = minetest.add_entity(pos,name) local newentity = mobf_find_entity(newobject) if newentity ~= nil then @@ -357,7 +357,7 @@ function spawning.spawn_and_check(name,suffix,pos,text) mobf_assert_backtrace(pos.y ~= nil) mobf_assert_backtrace(name ~= nil) mobf_assert_backtrace(suffix ~= nil) - local newobject = minetest.env:add_entity(pos,name .. suffix) + local newobject = minetest.add_entity(pos,name .. suffix) if newobject then local newentity = mobf_find_entity(newobject) diff --git a/mobf/utils/error_handling.lua b/mobf/utils/error_handling.lua new file mode 100644 index 0000000..6b19271 --- /dev/null +++ b/mobf/utils/error_handling.lua @@ -0,0 +1,29 @@ +------------------------------------------------------------------------------- +-- Mob Framework Mod by Sapier +-- +-- You may copy, use, modify or do nearly anything except removing this +-- copyright notice. +-- And of course you are NOT allowed to pretend you have written it. +-- +--! @file error_handling.lua +--! @brief code required to do error handling +--! @copyright Sapier +--! @author Sapier +--! @date 2013-05-010 +--! +-- Contact sapier a t gmx net +------------------------------------------------------------------------------- +-- +------------------------------------------------------------------------------- +-- name: mobf_assert_backtrace(value) +-- +--! @brief assert in case value is false +-- +--! @param value to evaluate +------------------------------------------------------------------------------- +function mobf_assert_backtrace(value) + if value == false then + print(debug.traceback("Current Callstack:\n")) + assert(value) + end +end \ No newline at end of file diff --git a/mobf/utils/generic_functions.lua b/mobf/utils/generic_functions.lua index 705e864..fcfe011 100644 --- a/mobf/utils/generic_functions.lua +++ b/mobf/utils/generic_functions.lua @@ -3,7 +3,7 @@ -- -- You may copy, use, modify or do nearly anything except removing this -- copyright notice. --- And of course you are NOT allow to pretend you have written it. +-- And of course you are NOT allowed to pretend you have written it. -- --! @file generic_functions.lua --! @brief generic functions used in many different places @@ -185,10 +185,10 @@ function mobf_max_light_around(pos,distance,daytime) for z_run=pos.z-distance,pos.z+distance,1 do for x_run=pos.x-distance,pos.x+distance,1 do local current_pos = {x=x_run,y=y_run,z=z_run } - local node = minetest.env:get_node(current_pos) + local node = minetest.get_node(current_pos) if node.name == "air" then - local current_light = minetest.env:get_node_light(current_pos,daytime) + local current_light = minetest.get_node_light(current_pos,daytime) if current_light > max_light then max_light = current_light @@ -219,7 +219,7 @@ function mobf_mob_around(mob_name,mob_transform,pos,range,ignore_playerspawned) mobf_assert_backtrace(range ~= nil) - local objectlist = minetest.env:get_objects_inside_radius(pos,range) + local objectlist = minetest.get_objects_inside_radius(pos,range) if mob_transform == nil then mob_transform = "" @@ -282,7 +282,7 @@ function mobf_spawner_around(mob_name,pos,range) local count = 0 local objectcount = 0 - local objectlist = minetest.env:get_objects_inside_radius(pos,range) + local objectlist = minetest.get_objects_inside_radius(pos,range) for index,value in pairs(objectlist) do @@ -325,7 +325,7 @@ end --! @return: true/false ------------------------------------------------------------------------------- function mobf_line_of_sightX(pos1,pos2) - return minetest.env:get_line_of_sight(pos1,pos2) + return minetest.get_line_of_sight(pos1,pos2) end ------------------------------------------------------------------------------- @@ -354,7 +354,7 @@ function mobf_line_of_sight(pos1,pos2) y=pos1.y + (normalized_vector.y *i), z=pos1.z + (normalized_vector.z *i)} - local node = minetest.env:get_node(tocheck) + local node = minetest.get_node(tocheck) if minetest.registered_nodes[node.name] == nil or @@ -402,7 +402,7 @@ function mobf_air_above(pos,height) y = pos.y + 1, z = pos.z } - local node_above = minetest.env:get_node(pos_above) + local node_above = minetest.get_node(pos_above) if node_above.name ~= "air" then return false @@ -424,7 +424,7 @@ end ------------------------------------------------------------------------------- function mobf_ground_distance(pos,media) - local node_to_check = minetest.env:get_node(pos) + local node_to_check = minetest.get_node(pos) local count = 0 @@ -433,7 +433,7 @@ function mobf_ground_distance(pos,media) count = count +1 pos = {x=pos.x,y=pos.y-1,z=pos.z}; - node_to_check = minetest.env:get_node(pos) + node_to_check = minetest.get_node(pos) end return count @@ -449,7 +449,7 @@ end ------------------------------------------------------------------------------- function mobf_surface_distance(pos) - local node_to_check = minetest.env:get_node(pos) + local node_to_check = minetest.get_node(pos) local count = 0 @@ -460,7 +460,7 @@ function mobf_surface_distance(pos) count = count +1 pos = {x=pos.x,y=pos.y-1,z=pos.z}; - node_to_check = minetest.env:get_node(pos) + node_to_check = minetest.get_node(pos) end return count @@ -476,7 +476,7 @@ end ------------------------------------------------------------------------------- function mobf_air_distance(pos) - local node_to_check = minetest.env:get_node(pos) + local node_to_check = minetest.get_node(pos) local count = 0 @@ -486,7 +486,7 @@ function mobf_air_distance(pos) count = count +1 pos = {x=pos.x,y=pos.y+1,z=pos.z}; - node_to_check = minetest.env:get_node(pos) + node_to_check = minetest.get_node(pos) end if node_to_check.name == "air" then @@ -506,13 +506,13 @@ end ------------------------------------------------------------------------------- function mobf_above_water(pos) - local node_to_check = minetest.env:get_node(pos) + local node_to_check = minetest.get_node(pos) while node_to_check ~= nil and node_to_check.name == "air" do pos = {x=pos.x,y=pos.y-1,z=pos.z}; - node_to_check = minetest.env:get_node(pos) + node_to_check = minetest.get_node(pos) end if node_to_check.name == "default:water_source" or @@ -537,7 +537,7 @@ end function mobf_get_sunlight_surface(x,z, min_y, max_y) for runy = min_y, max_y,1 do local pos = { x=x,y=runy, z=z } - local node_to_check = minetest.env:get_node(pos) + local node_to_check = minetest.get_node(pos) if node_to_check.name == "default:dirt_with_grass" then return pos.y @@ -565,22 +565,25 @@ function mobf_get_surface(x,z, min_y, max_y) mobf_assert_backtrace(x ~= nil) mobf_assert_backtrace(z ~= nil) - if type(minetest.env.get_surface) == "function" then - return minetest.env:get_surface({x=x,y=min_y,z=z},max_y-min_y) + if type(minetest.get_surface) == "function" then + local basepos = {x=x,y=min_y,z=z} + local offset = max_y-min_y + print("Values: " .. dump(basepos) .." " .. dump(offset)) + return minetest.get_surface(basepos,offset) end - local last_node = minetest.env:get_node({ x=x,y=min_y, z=z }) - for runy = min_y+1, max_y,1 do - local pos = { x=x,y=runy, z=z } - local node_to_check = minetest.env:get_node(pos) - if node_to_check.name == "air" and - last_node.name ~= "air" and - last_node.mame ~= "ignore" then - return pos.y - end - last_node = node_to_check - end - return nil + local last_node = minetest.get_node({ x=x,y=min_y, z=z }) + for runy = min_y+1, max_y,1 do + local pos = { x=x,y=runy, z=z } + local node_to_check = minetest.get_node(pos) + if node_to_check.name == "air" and + last_node.name ~= "air" and + last_node.mame ~= "ignore" then + return pos.y + end + last_node = node_to_check + end + return nil end ------------------------------------------------------------------------------- @@ -593,7 +596,7 @@ end ------------------------------------------------------------------------------- function entity_at_loaded_pos(pos) - local current_node = minetest.env:get_node(pos) + local current_node = minetest.get_node(pos) if current_node ~= nil then if current_node.name == "ignore" then @@ -692,20 +695,4 @@ function mobf_is_pos(value) return true end -------------------------------------------------------------------------------- --- name: mobf_assert_backtrace(value) --- ---! @brief assert in case value is false --- ---! @param value to evaluate -------------------------------------------------------------------------------- -function mobf_assert_backtrace(value) - if value == false then - print(debug.traceback("Current Callstack:\n")) - assert(value) - end -end - - - --!@} diff --git a/mobf/weapons.lua b/mobf/weapons.lua index 34eefcb..b01e2d4 100644 --- a/mobf/weapons.lua +++ b/mobf/weapons.lua @@ -45,7 +45,7 @@ function mobf_do_area_damage(pos,immune,damage_groups,range) --damage objects within inner blast radius mobf_assert_backtrace(type(range) ~= "table") - objs = minetest.env:get_objects_inside_radius(pos, range) + objs = minetest.get_objects_inside_radius(pos, range) for k, obj in pairs(objs) do --don't do damage to issuer @@ -77,7 +77,7 @@ function mobf_do_node_damage(pos,immune_list,range,chance) for k=pos.z-range,pos.z+range,1 do --TODO create a little bit more sophisticated blast resistance if math.random() < chance then - local toremove = minetest.env:get_node({x=i,y=j,z=k}) + local toremove = minetest.get_node({x=i,y=j,z=k}) if toremove ~= nil then local immune = false @@ -92,7 +92,7 @@ function mobf_do_node_damage(pos,immune_list,range,chance) if immune ~= true then - minetest.env:remove_node({x=i,y=j,z=k}) + minetest.remove_node({x=i,y=j,z=k}) end end end @@ -158,15 +158,15 @@ function MOBF_FIREBALL_ENTITY.surfacefire(pos,range) for j=pos.y-range/2, pos.y+range/2, 1 do for k=pos.z-range/2, pos.z+range/2, 1 do - local current = minetest.env:get_node({x=i,y=j,z=k}) - local ontop = minetest.env:get_node({x=i,y=j+1,z=k}) + local current = minetest.get_node({x=i,y=j,z=k}) + local ontop = minetest.get_node({x=i,y=j+1,z=k}) --print("put fire? " .. printpos({x=i,y=j,z=k}) .. " " .. current.name .. " " ..ontop.name) if (current.name ~= "air") and (current.name ~= "fire:basic_flame") and (ontop.name == "air") then - minetest.env:set_node({x=i,y=j+1,z=k}, {name="fire:basic_flame"}) + minetest.set_node({x=i,y=j+1,z=k}, {name="fire:basic_flame"}) end end @@ -189,11 +189,11 @@ end ------------------------------------------------------------------------------- function MOBF_FIREBALL_ENTITY.on_step(self, dtime) local pos = self.object:getpos() - local node = minetest.env:get_node(pos) + local node = minetest.get_node(pos) --detect hit - local objs=minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1) + local objs=minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1) local hit = false @@ -280,11 +280,11 @@ end ------------------------------------------------------------------------------- function MOBF_PLASMABALL_ENTITY.on_step(self, dtime) local pos = self.object:getpos() - local node = minetest.env:get_node(pos) + local node = minetest.get_node(pos) --detect hit - local objs=minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1) + local objs=minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 1) local hit = false @@ -310,20 +310,20 @@ function MOBF_PLASMABALL_ENTITY.on_step(self, dtime) if node.name ~= "air" or hit then - --replace this loop by minetest.env:find_node_near? + --replace this loop by minetest.find_node_near? --do node damage for i=pos.x-1, pos.x+1, 1 do for j=pos.y-1, pos.y+1, 1 do for k=pos.z-1,pos.z+1,1 do --TODO create a little bit more sophisticated blast resistance if math.random() < 0.5 then - local toremove = minetest.env:get_node({x=i,y=j,z=k}) + local toremove = minetest.get_node({x=i,y=j,z=k}) if toremove ~= nil and toremove.name ~= "default:stone" and toremove.name ~= "default:cobble" then - minetest.env:remove_node({x=i,y=j,z=k}) + minetest.remove_node({x=i,y=j,z=k}) end end end @@ -377,10 +377,10 @@ MOBF_ARROW_ENTITY={ MOBF_ARROW_ENTITY.on_step = function(self, dtime) self.timer=self.timer+dtime local pos = self.object:getpos() - local node = minetest.env:get_node(pos) + local node = minetest.get_node(pos) if self.timer>0.2 then - local objs = minetest.env:get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) + local objs = minetest.get_objects_inside_radius({x=pos.x,y=pos.y,z=pos.z}, 2) for k, obj in pairs(objs) do if obj:get_luaentity() ~= nil and obj ~= self.owner then @@ -405,7 +405,7 @@ MOBF_ARROW_ENTITY.on_step = function(self, dtime) if self.lastpos.x~=nil then if node.name ~= "air" then - minetest.env:add_item(self.lastpos, 'mobf:arrow') + minetest.add_item(self.lastpos, 'mobf:arrow') self.object:remove() end end diff --git a/mobf_settings/init.lua b/mobf_settings/init.lua index bede662..fc79938 100644 --- a/mobf_settings/init.lua +++ b/mobf_settings/init.lua @@ -3,92 +3,22 @@ -- -- You may copy, use, modify or do nearly anything except removing this -- copyright notice. --- And of course you are NOT allow to pretend you have written it. +-- And of course you are NOT allowed to pretend you have written it. -- --! @file init.lua --! @brief settings gui for mobf --! @copyright Sapier --! @author Sapier ---! @date 2012-12-27 +--! @date 2013-05-20 -- -- Contact sapier a t gmx net ------------------------------------------------------------------------------- minetest.log("action","MOD: mobf_settings mod loading ... ") mobf_settings = {} -mobf_settings.version = "0.0.21" -mobf_settings.max_list_page_num = 5 -mobf_settings.buttons = {} -mobf_settings.buttons[1] = {} -mobf_settings.buttons[2] = {} -mobf_settings.tool_buttons = {} -mobf_settings.tool_buttons[1] = {} -mobf_settings.tool_buttons[2] = {} -mobf_settings.menubutton = "button_exit[11,9.5;2,0.5;main; Exit]" -mobf_settings.formspechandler = function(player,formspec) - name = player:get_player_name() - minetest.show_formspec(name,"mobf_settings:mainform",formspec) - end - -mobf_settings_debug = function () end - ------------------------------------------------------------------------------- --- name: get_animal_list --- ---! @brief get animal list form element for a page ---! @ingroup mobf_settings --- ---! @param page_number number of page to get list for ---! ---! @return formspec for page -------------------------------------------------------------------------------- -function mobf_settings.get_animal_list(page_number) - - local mobf_mob_blacklist_string = minetest.world_setting_get("mobf_blacklist") - local mobf_mobs_blacklisted = nil - if mobf_mob_blacklist_string ~= nil then - mobf_mobs_blacklisted = minetest.deserialize(mobf_mob_blacklist_string) - end - - local retval = "" - local line = 3 - - local start_at = page_number -1 - - for i,val in ipairs(mobf_rtd.registred_mob) do - - if i > (start_at*16) then - if i <= (start_at*16 + 8) then - retval = retval .. "label[1.0," .. line .. ";" .. val .. "]" - local line_btn = line + 0.25 - if contains(mobf_mobs_blacklisted,val) then - retval = retval .. "button[0.5," .. line_btn .. ";0.5,0.25;page"..page_number.."_enable_" .. val .. "; ]" - else - retval = retval .. "button[0.5," .. line_btn .. ";0.5,0.25;page"..page_number.."_disable_" .. val .. ";x]" - end - end - - if i > (start_at*16 + 8 ) and - i <= (start_at*16 + 16) then - - local temp_line = line - (8*0.75) - retval = retval .. "label[7.0," .. temp_line .. ";" .. val .. "]" - - local line_btn = temp_line +0.25 - if contains(mobf_mobs_blacklisted,val) then - retval = retval .. "button[6.5," .. line_btn .. ";0.5,0.25;page"..page_number.."_enable_" .. val .. "; ]" - else - retval = retval .. "button[6.5," .. line_btn .. ";0.5,0.25;page"..page_number.."_disable_" .. val .. ";x]" - end - end - - line = line + 0.75 - end - end - - return retval -end - +mobf_settings.tabs = {} +mobf_settings.version = "0.9.0" +mobf_settings.formname = "mobf_settings" ------------------------------------------------------------------------------ -- name: contains @@ -103,504 +33,572 @@ end ------------------------------------------------------------------------------- function contains(cur_table,element) - if cur_table == nil then - --print("looking in empty table") - return false - end - - --print("looking for " .. dump(element) .. " in " .. dump(cur_table)) - - for i,v in ipairs(cur_table) do - if v == element then - --print("found: " .. element .. " in table") - return true - end - end - - --print("didn't find " .. element) - return false -end - ------------------------------------------------------------------------------- --- name: contains_key --- ---! @brief check if table contains key ---! @ingroup mobf_settings --- ---! @param cur_table table to check for element ---! @param element element to find in table ---! ---! @return true/false -------------------------------------------------------------------------------- -function get_value(cur_table,key) - - if cur_table == nil or - key == nil then - --print("looking in empty table") - return nil - end - - --print("looking for " .. dump(element) .. " in " .. dump(cur_table)) - - for k,v in pairs(cur_table) do - if k == key then - --print("found: " .. element .. " in table") - return v - end - end - - --print("didn't find " .. element) - return nil -end - - ------------------------------------------------------------------------------- --- name: get_known_animals_form --- ---! @brief create page to be shown ---! @ingroup mobf_settings --- ---! @param page name of page ---! ---! @return formspec of page -------------------------------------------------------------------------------- -function mobf_settings.get_main_settings_form(page) - local retval = "" - - for i=0,mobf_settings.max_list_page_num,1 do - if page == "mobf_list_page" .. i then - local nextpage = i +1 - local prevpage = i -1 - retval = "label[0.5,2.25;Known Mobs, Page ".. i .. "]" - .."label[0.5,2.5;-------------------------------------------]" - .."label[6.5,2.5;----------------------------------------]" - .. mobf_settings.get_animal_list(i) - - if i ~= mobf_settings.max_list_page_num then - retval = retval .."button[3,9.5;2,0.5;mobf_list_page" .. nextpage ..";Next]" - end - if i ~= 1 then - retval = retval .."button[0.5,9.5;2,0.5;mobf_list_page" .. prevpage ..";Prev]" - end - - return retval - end + if cur_table == nil then + --print("looking in empty table") + return false end - if page == "mobf_restart_required" then - retval = "label[0.5,2.25;This settings require to restart Game!]" - .."label[0.5,2.5;-------------------------------------------]" - .."label[6.5,2.5;----------------------------------------]" - - retval = retval .. mobf_settings.draw_buttons(mobf_settings.buttons[1],0.5) - retval = retval .. mobf_settings.draw_buttons(mobf_settings.buttons[2],6.5) - - return retval - end + --print("looking for " .. dump(element) .. " in " .. dump(cur_table)) - if page == "mobf_tools" then - retval = "label[0.5,2.25;Tools to be used with mobf]" - .."label[0.5,2.5;-------------------------------------------]" - .."label[6.5,2.5;----------------------------------------]" - - retval = retval .. mobf_settings.draw_tool_buttons(mobf_settings.tool_buttons[1],0.5) - retval = retval .. mobf_settings.draw_tool_buttons(mobf_settings.tool_buttons[2],6.5) - - return retval - end - - return "" -end - ------------------------------------------------------------------------------- --- name: draw_buttons --- ---! @brief get formspec for button drawing ---! @ingroup mobf_settings --- ---! @param buttons buttons to show ---! @param xpos pos to show buttons at ---! ---! @return formspec for button list -------------------------------------------------------------------------------- -function mobf_settings.draw_buttons(buttons,xpos) - local retval = "" - - local y_pos = 3.75 - - for i=1,#buttons,1 do - local current_setting = minetest.world_setting_get(buttons[i].value) - - if buttons[i].inverted then - if not current_setting then - retval = retval .. "button[" .. xpos .. ",".. y_pos .. ";6,0.5;" .. - "en_" .. buttons[i].value .. ";" .. - buttons[i].text .. " is enabled]" - else - retval = retval .. "button[" .. xpos .. ",".. y_pos .. ";6,0.5;" .. - "dis_" .. buttons[i].value .. ";" .. - buttons[i].text .. " is disabled]" - end - - else - if current_setting then - retval = retval .. "button[" .. xpos .. ",".. y_pos .. ";6,0.5;" .. - "dis_" .. buttons[i].value .. ";" .. - buttons[i].text .. " is enabled]" - else - retval = retval .. "button[" .. xpos .. ",".. y_pos .. ";6,0.5;" .. - "en_" .. buttons[i].value .. ";" .. - buttons[i].text .. " is disabled]" - end - end - - y_pos = y_pos + 0.75 - end - - return retval -end - ------------------------------------------------------------------------------- --- name: draw_tool_buttons --- ---! @brief get formspec for button drawing ---! @ingroup mobf_settings --- ---! @param buttons buttons to show ---! @param xpos pos to show buttons at ---! ---! @return formspec for button list -------------------------------------------------------------------------------- -function mobf_settings.draw_tool_buttons(buttons,xpos) - local retval = "" - - local y_pos = 3.75 - - for i=1,#buttons,1 do - - retval = retval .. "button[" .. xpos .. ",".. y_pos .. ";6,0.5;" .. - buttons[i].id .. ";" .. - buttons[i].text .."]" - - y_pos = y_pos + 0.75 - end - - return retval -end - ------------------------------------------------------------------------------- --- name: handle_mob_en_disable_button --- ---! @brief handle press of en_disable button for a mob ---! @ingroup mobf_settings --- ---! @param fields ---! ---! @return -------------------------------------------------------------------------------- -function mobf_settings.handle_mob_en_disable_button(fields) - for i,val in ipairs(mobf_rtd.registred_mob) do - - local page = nil - - for i = 0 , 5 , 1 do - if fields["page".. i .. "_enable_" .. val] ~= nil then - local mobf_mob_blacklist_string = minetest.world_setting_get("mobf_blacklist") - local mobf_mobs_blacklisted = nil - if mobf_mob_blacklist_string ~= nil then - mobf_mobs_blacklisted = minetest.deserialize(mobf_mob_blacklist_string) - end - - if mobf_mobs_blacklisted == nil then - mobf_settings_debug("MOBF_SETTINGS: trying to enable mob but no mobs were blacklisted!?") - else - - local new_blacklist = {} - - for i,v in ipairs(mobf_mobs_blacklisted) do - if v ~= val then - table.insert(new_blacklist,v) - end - end - - minetest.world_setting_set("mobf_blacklist",minetest.serialize(new_blacklist)) - mobf_settings_debug("MOBF_SETTINGS: Enabling: " .. val .. " blacklist is now: " .. dump(new_blacklist)) - end - page = i - end - end - - for i = 0 , 5 , 1 do - if fields["page".. i .. "_disable_" .. val] ~= nil then - - local mobf_mob_blacklist_string = minetest.world_setting_get("mobf_blacklist") - local mobf_mobs_blacklisted = nil - if mobf_mob_blacklist_string ~= nil then - mobf_mobs_blacklisted = minetest.deserialize(mobf_mob_blacklist_string) - end - - if mobf_mobs_blacklisted == nil then - mobf_mobs_blacklisted = {} - end - - table.insert(mobf_mobs_blacklisted,val) - - minetest.world_setting_set("mobf_blacklist",minetest.serialize(mobf_mobs_blacklisted)) - page = i - mobf_settings_debug("MOBF_SETTINGS: Disabling: " .. val) - end - end - - if page ~= nil then - return "mobf_list_page" .. page - end - end - return nil -end - - ------------------------------------------------------------------------------- --- name: handle_config_changed_button --- ---! @brief handle press of a settings button ---! @ingroup mobf_settings --- ---! @param fields ---! ---! @return -------------------------------------------------------------------------------- -function mobf_settings.handle_config_changed_button(fields) - - local config_setting = nil - local enable = false - - for j=1,2,1 do - for i=1,#mobf_settings.buttons[j],1 do - local fieldname = "en_" .. mobf_settings.buttons[j][i].value - if fields[fieldname] ~= nil then - config_setting = mobf_settings.buttons[j][i] - enable = true - break - end - - fieldname = "dis_" .. mobf_settings.buttons[j][i].value - if fields[fieldname] ~= nil then - config_setting = mobf_settings.buttons[j][i] - enable = false - break - end - end - end - - if config_setting ~= nil then - mobf_settings_debug("MOBF_SETTINGS: detected changed value " .. config_setting.value) - if enable then - minetest.world_setting_set(config_setting.value,"true") - else - minetest.world_setting_set(config_setting.value,"false") - end - return true - end - - return false -end - - ------------------------------------------------------------------------------- --- name: handle_tool_button --- ---! @brief handle press of a settings button ---! @ingroup mobf_settings --- ---! @param player whoever clicked the button ---! @param fields ---! ---! @return -------------------------------------------------------------------------------- -function mobf_settings.handle_tool_button(player,fields) - - for i=1,2,1 do - for j=1,#mobf_settings.tool_buttons[i],1 do - local id = nil - - if mobf_settings.tool_buttons[i][j] ~= nil then - id = mobf_settings.tool_buttons[i][j].id - end - - local value = get_value(fields,id) - if value ~= nil then - - if type(mobf_settings.tool_buttons[i][j].param) == "function" then - mobf_settings.tool_buttons[i][j].param(player,fields) - else - mobf_settings_debug("MOBF_SETTINGS: invalid use of tool_button") - end - return true - end - end - end - return false -end - ------------------------------------------------------------------------------- --- name: get_formspec --- ---! @brief generate page form for mobf_settings ---! @ingroup mobf_settings --- ---! @param player player to create page for ---! @param page pagename to create -------------------------------------------------------------------------------- -function mobf_settings.get_formspec(player,page) - local version = "< 1.4.5" - - if (type(mobf_get_version) == "function") then - version = mobf_get_version() - end - - local playername = player:get_player_name() - - if minetest.check_player_privs(playername, {mobfw_admin=true}) then - local pageform = mobf_settings.get_main_settings_form(page) - - return "size[13,10]" - ..mobf_settings.menubutton - .."button[0.5,0.75;3,0.5;mobf_list_page1; Known Mobs ]" - .."button[4,0.75;3,0.5;mobf_restart_required; Settings ]" - .."button[7.5,0.75;3,0.5;mobf_tools; Tools ]" - .."label[5.5,0;MOBF " .. version .. "]" - .. pageform - else - local pageform = mobf_settings.get_main_settings_form("mobf_tools") - return "size[13,10]" - ..mobf_settings.menubutton - .."label[0.5,0.75;You are not allowed to change any setting!]" - .."label[5.5,0;MOBF " .. version .. "]" - ..pageform - end - -end - - ------------------------------------------------------------------------------- --- name: set_mob_list_page(fields) --- ---! @brief check if requested page is a list page and show it ---! @ingroup mobf_settings --- ---! @oaram player ---! @param fields data for callback --- ---! @return true if handled false if not -------------------------------------------------------------------------------- -function mobf_settings.set_mob_list_page(player,fields) - if fields.mobf then - mobf_settings.formspechandler(player, mobf_settings.get_formspec(player,"mobf_list_page1")) - return true - end - - - for i=1,5,1 do - local namestring = "mobf_list_page" .. i - - if fields[namestring] ~= nil then - mobf_settings.formspechandler(player, mobf_settings.get_formspec(player,namestring)) + for i,v in ipairs(cur_table) do + if v == element then + --print("found: " .. element .. " in table") return true end end - + + --print("didn't find " .. element) return false end ------------------------------------------------------------------------------ --- name: register_config_button(index,configvalue,buttontext,inverted) +-- name: explode_textlist_event -- ---! @brief register a button to be shown on config page +--! @brief fetch data from textlist event --! @ingroup mobf_settings -- ---! @param index column to draw button at ---! @param configvalue config value to change by this button ---! @param buttontext to set for this value ---! @param inverted invert enable/disable text on button --- +--! @param text data to parse +--! +--! @return textlist event ------------------------------------------------------------------------------- -function mobf_settings.register_config_button(index,configvalue,buttontext,inverted) - - local toadd = { - value = configvalue, - text = buttontext, - inverted = inverted, - } +function explode_textlist_event(text) - table.insert(mobf_settings.buttons[index],toadd) + local retval = {} + retval.typ = "INV" + + local parts = text:split(":") + + if #parts == 2 then + retval.typ = parts[1]:trim() + retval.index= tonumber(parts[2]:trim()) + + if type(retval.index) ~= "number" then + retval.typ = "INV" + end + end + + return retval end ------------------------------------------------------------------------------ --- name: register_tool_button(index,id,buttontext,param) +-- name: handle_event -- ---! @brief register a button to be shown on config page +--! @brief do actions according to event --! @ingroup mobf_settings -- ---! @param index column to draw button at ---! @param id to use for button (has to be unique) ---! @param buttontext to set for this value ---! @param param function to call --- +--! @param player issuing the formspec +--! @param formname form to be shown +--! @param fields event information +--! +--! @return true/false handled or not ------------------------------------------------------------------------------- -function mobf_settings.register_tool_button(index,id,buttontext,param) - - local toadd = { - param = param, - text = buttontext, - id = id, - } +function mobf_settings.handle_event(player,formname,fields) + print("event handler: form: " .. formname) + print("fields: " .. dump(fields)) + if formname ~= mobf_settings.formname then + return false + end - table.insert(mobf_settings.tool_buttons[index],toadd) + local sender_data = mobf_settings.get_sender_data(fields) + + if sender_data ~= nil and sender_data.name == "maintab" then + sender_data.tab = tonumber(sender_data.value) + end + + if sender_data ~= nil then + sender_data.player = player + sender_data.formname = formname + sender_data.fields = fields + + --check admin privs + sender_data.is_admin = true + + print("event handler: tab: #" .. dump(sender_data.tab) .. " btn: " .. dump(sender_data.name)) + + if sender_data.tab <= #mobf_settings.tabs then + --make sure no admin tab is shown to non admin users + if mobf_settings.tabs[sender_data.tab].admin then + if not sender_data.is_admin then + local fixed = false + for i=1,#mobf_settings.tabs,1 do + if not mobf_settings.tabs[i].admin then + sender_data.tab = i + sender_data.name = "ukn" + sender_data.fields = {} + sender_data.type = "ukn" + fixed = true + end + end + + if not fixed then + return + end + end + end + + print("showing tab: #" .. sender_data.tab .. " " .. dump(mobf_settings.tabs[sender_data.tab])) + mobf_settings.tabs[sender_data.tab].handler(sender_data) + end + + end + return true end +------------------------------------------------------------------------------ +-- name: get_sender_data +-- +--! @brief find caller of formspec +--! @ingroup mobf_settings +-- +--! @param fields to look for sender +--! +--! @return sender information +------------------------------------------------------------------------------- +function mobf_settings.get_sender_data(fields) + for key,value in pairs(fields) do + local parts = key:split("_") + + if #parts >= 3 then + if parts[1] == "btn" or + parts[1] == "cb" or + parts[1] == "tl" or + parts[1] == "th" then + + local name = "" + for i=3, #parts,1 do + if name ~= "" then + name = name .. "_" + end + name = name .. parts[i] + end + + return { + type = parts[1], + tab = tonumber(parts[2]), + name = name, + value = value + } + end + end + end + return nil +end + +------------------------------------------------------------------------------ +-- name: handle_main_tab +-- +--! @brief handle events from main tab +--! @ingroup mobf_settings +-- +--! @param sender_data all information gatered +--! +--! @return sender information +------------------------------------------------------------------------------- +function mobf_settings.handle_main_tab(sender_data) + --check player privs + if sender_data.is_admin then + + mobf_settings.handle_main_tab_input(sender_data) + + mobf_settings.show_main_tab(sender_data) + else + + end +end + +------------------------------------------------------------------------------ +-- name: handle_settings_tab +-- +--! @brief handle events from main tab +--! @ingroup mobf_settings +-- +--! @param sender_data all information gatered +--! +--! @return sender information +------------------------------------------------------------------------------- +function mobf_settings.handle_settings_tab(sender_data) + --check player privs + if sender_data.is_admin then + + mobf_settings.handle_settings_tab_input(sender_data) + + mobf_settings.show_settings_tab(sender_data) + else + + end +end + +------------------------------------------------------------------------------ +-- name: handle_main_tab +-- +--! @brief handle events from main tab +--! @ingroup mobf_settings +-- +--! @param sender_data all information gatered +--! +--! @return sender information +------------------------------------------------------------------------------- +function mobf_settings.handle_tools_tab(sender_data) + if mobf_settings.handle_tools_tab_input(sender_data) then + mobf_settings.show_tools_tab(sender_data) + end +end + + +------------------------------------------------------------------------------ +-- name: show_main_tab +-- +--! @brief update formspec to main tab +--! @ingroup mobf_settings +-- +--! @param sender_data all information gatered +------------------------------------------------------------------------------- +function mobf_settings.show_main_tab(sender_data) + local formspec = mobf_settings.formspec_header(sender_data) + + formspec = formspec .. "label[0.5,0;Mobs:]" + formspec = formspec .. "textlist[0.5,0.5;6,8;tl_" .. sender_data.tab .. "_mobs;" + + local mobf_mob_blacklist_string = minetest.world_setting_get("mobf_blacklist") + local mobf_mobs_blacklisted = nil + if mobf_mob_blacklist_string ~= nil then + mobf_mobs_blacklisted = minetest.deserialize(mobf_mob_blacklist_string) + end + + + local toadd = "" + + for i,val in ipairs(mobf_rtd.registred_mob) do + if toadd ~= "" then + toadd = toadd .. "," + end + if contains(mobf_mobs_blacklisted,val) then + toadd = toadd .. "#RED" .. val + else + toadd = toadd .. "#GRN" .. val + end + end + + formspec = formspec .. toadd .. ";0]" + + if formspec ~= nil then + minetest.show_formspec(sender_data.player:get_player_name(), + sender_data.formname, + formspec) + end +end + +------------------------------------------------------------------------------ +-- name: show_tools_tab +-- +--! @brief update formspec to tools tab +--! @ingroup mobf_settings +-- +--! @param sender_data all information gatered +------------------------------------------------------------------------------- +function mobf_settings.show_tools_tab(sender_data) + local formspec = mobf_settings.formspec_header(sender_data) + + formspec = formspec .. + "button[1.5,1;4,0.5;btn_" .. sender_data.tab .. "_pathmaker_tool;Give pathmarker tool]" .. + "button[1.5,1.75;4,0.5;btn_" .. sender_data.tab .. "_preserved_mobs;Show preserved mobs gui]" .. + "button[1.5,2.5;4,0.5;btn_" .. sender_data.tab .. "_path_manager;Show path manager]" + + if formspec ~= nil then + minetest.show_formspec(sender_data.player:get_player_name(), + sender_data.formname, + formspec) + end +end + +------------------------------------------------------------------------------ +-- name: show_settings_tab +-- +--! @brief update formspec to settings tab +--! @ingroup mobf_settings +-- +--! @param sender_data all information gatered +------------------------------------------------------------------------------- +function mobf_settings.show_settings_tab(sender_data) + local formspec = mobf_settings.formspec_header(sender_data) + + formspec = formspec .. "checkbox[1,1;" .. + "cb_" .. sender_data.tab .. "_disable_animal_spawning;" .. + "Disable mob spawning;" .. + mobf_settings.setting_gettext("mobf_disable_animal_spawning") .."]" + + formspec = formspec .. "checkbox[1,1.75;" .. + "cb_" .. sender_data.tab .. "_mobf_disable_3d_mode;" .. + "Disable 3D mobs;" .. + mobf_settings.setting_gettext("mobf_disable_3d_mode") .."]" + + formspec = formspec .. "checkbox[1,2.5;" .. + "cb_" .. sender_data.tab .. "_mobf_animal_spawning_secondary;" .. + "Enable secondary spawning;" .. + mobf_settings.setting_gettext("mobf_animal_spawning_secondary") .."]" + + formspec = formspec .. "checkbox[1,3.25;" .. + "cb_" .. sender_data.tab .. "_mobf_delete_disabled_mobs;" .. + "Delete disabled mobs+spawners;" .. + mobf_settings.setting_gettext("mobf_delete_disabled_mobs") .."]" + + formspec = formspec .. "checkbox[1,4;" .. + "cb_" .. sender_data.tab .. "_mobf_log_bug_warnings;" .. + "Log MOBF bug warnings;" .. + mobf_settings.setting_gettext("mobf_log_bug_warnings") .."]" + + formspec = formspec .. "checkbox[1,4.75;" .. + "cb_" .. sender_data.tab .. "_vombie_3d_burn_animation_enabled;" .. + "Vombie 3D burn animation;" .. + mobf_settings.setting_gettext("vombie_3d_burn_animation_enabled") .."]" + + formspec = formspec .. "checkbox[1,5.5;" .. + "cb_" .. sender_data.tab .. "_mobf_log_removed_entities;" .. + "Log all removed mobs;" .. + mobf_settings.setting_gettext("mobf_log_removed_entities") .."]" + + formspec = formspec .. "checkbox[1,6.25;" .. + "cb_" .. sender_data.tab .. "_mobf_grief_protection;" .. + "Enable grief protection;" .. + mobf_settings.setting_gettext("mobf_grief_protection") .."]" + + formspec = formspec .. "checkbox[1,7;" .. + "cb_" .. sender_data.tab .. "_mobf_lifebar;" .. + "Show mob lifebar;" .. + mobf_settings.setting_gettext("mobf_lifebar") .."]" + print("formspec: " .. formspec) + if formspec ~= nil then + minetest.show_formspec(sender_data.player:get_player_name(), + sender_data.formname, + formspec) + end +end + +------------------------------------------------------------------------------ +-- name: handle_tools_tab_input +-- +--! @brief handle input from tools tab +--! @ingroup mobf_settings +-- +--! @param sender_data all information gatered +------------------------------------------------------------------------------- +function mobf_settings.handle_tools_tab_input(sender_data) + + if sender_data.name == "pathmaker_tool" then + sender_data.player:get_inventory():add_item("main", "mobf:path_marker 1") + end + + local name = sender_data.player:get_player_name() + + if sender_data.name == "preserved_mobs" then + mob_preserve.handle_command(name,nil) + return false + end + + if sender_data.name == "path_manager" then + mobf_path.show_manage_menu(name,nil) + return false + end + + return true +end + +------------------------------------------------------------------------------ +-- name: handle_main_tab_input +-- +--! @brief handle input from main tab +--! @ingroup mobf_settings +-- +--! @param sender_data all information gatered +------------------------------------------------------------------------------- +function mobf_settings.handle_main_tab_input(sender_data) + + if sender_data.name == "mobs" then + local tl_event = explode_textlist_event(sender_data.value) + if tl_event.typ == "DCL" and + tl_event.index < #mobf_rtd.registred_mob then + local clicked_mob = mobf_rtd.registred_mob[tl_event.index] + + local mobf_mob_blacklist_string = minetest.world_setting_get("mobf_blacklist") + local mobf_mobs_blacklisted = nil + if mobf_mob_blacklist_string ~= nil then + mobf_mobs_blacklisted = minetest.deserialize(mobf_mob_blacklist_string) + else + mobf_mobs_blacklisted = {} + end + + local new_blacklist = {} + + if contains(mobf_mobs_blacklisted,clicked_mob) then + for i=1,#mobf_mobs_blacklisted,1 do + if mobf_mobs_blacklisted[i] ~= clicked_mob then + table.insert(new_blacklist,mobf_mobs_blacklisted[i]) + end + end + else + new_blacklist = mobf_mobs_blacklisted + table.insert(mobf_mobs_blacklisted,clicked_mob) + end + + minetest.world_setting_set("mobf_blacklist",minetest.serialize(new_blacklist)) + end + end +end + +------------------------------------------------------------------------------ +-- name: handle_settings_tab_input +-- +--! @brief handle input from settings tab +--! @ingroup mobf_settings +-- +--! @param sender_data all information gatered +------------------------------------------------------------------------------- +function mobf_settings.handle_settings_tab_input(sender_data) + if sender_data.name == "mobf_disable_animal_spawning" then + mobf_set_world_setting("mobf_disable_animal_spawning", + mobf_settings.tobool(sender_data.value)) + end + + if sender_data.name == "mobf_disable_3d_mode" then + mobf_set_world_setting("mobf_disable_3d_mode", + mobf_settings.tobool(sender_data.value)) + end + + if sender_data.name == "mobf_animal_spawning_secondary" then + mobf_set_world_setting("mobf_animal_spawning_secondary", + mobf_settings.tobool(sender_data.value)) + end + + if sender_data.name == "mobf_delete_disabled_mobs" then + mobf_set_world_setting("mobf_delete_disabled_mobs", + mobf_settings.tobool(sender_data.value)) + end + + if sender_data.name == "mobf_log_bug_warnings" then + mobf_set_world_setting("mobf_log_bug_warnings", + mobf_settings.tobool(sender_data.value)) + end + + if sender_data.name == "mobf_log_removed_entities" then + mobf_set_world_setting("mobf_log_removed_entities", + mobf_settings.tobool(sender_data.value)) + end + + if sender_data.name == "mobf_grief_protection" then + mobf_set_world_setting("mobf_grief_protection", + mobf_settings.tobool(sender_data.value)) + end + + if sender_data.name == "mobf_lifebar" then + mobf_set_world_setting("mobf_lifebar", + mobf_settings.tobool(sender_data.value)) + end +end + +------------------------------------------------------------------------------ +-- name: tobool(value) +-- +--! @brief convert string to bool value +--! @ingroup mobf_settings +-- +--! @param value string +------------------------------------------------------------------------------- +function mobf_settings.tobool(value) + if value == "true" then + return true + else + return false + end +end + +------------------------------------------------------------------------------ +-- name: setting_getbool(name) +-- +--! @brief convert string to bool value +--! @ingroup mobf_settings +-- +--! @param value string +------------------------------------------------------------------------------- +function mobf_settings.setting_gettext(value) + + local value = mobf_get_world_setting(value) + + if value == nil then + return "false" + end + + if value then + return "true" + end + + return "false" +end + +------------------------------------------------------------------------------ +-- name: formspec_header +-- +--! @brief handle input from settings tab +--! @ingroup mobf_settings +-- +--! @param sender_data all information gatered +------------------------------------------------------------------------------- +function mobf_settings.formspec_header(sender_data) + local retval = "size[7,9]" .. + "label[-0.25,8.98;MOBF version: " ..mobf_get_version().."]" .. + "tabheader[-0.3,-0.99;th_" .. sender_data.tab .. "_maintab;" + + local toadd = "" + + for i=1,#mobf_settings.tabs,1 do + if mobf_settings.tabs[i].admin then + if sender_data.is_admin then + if toadd ~= "" then + toadd = toadd .. "," + end + toadd = toadd .. mobf_settings.tabs[i].caption + end + else + if toadd ~= "" then + toadd = toadd .. "," + end + toadd = toadd .. mobf_settings.tabs[i].caption + end + end + + retval = retval .. toadd .. ";" .. sender_data.tab .. ";true;false]" + + return retval +end + +------------------------------------------------------------------------------ +-- name: register_tab(caption,adminrequired,tabhandler) +-- +--! @brief handle input from settings tab +--! @ingroup mobf_settings +-- +--! @param caption of tab button +--! @param adminrequired should this tab be shown to admin only? +--! @param tabhandler function called to handle this tab +------------------------------------------------------------------------------- +function mobf_settings.register_tab(caption,adminrequired,tabhandler) + + local tab_to_add = { + admin = adminrequired, + handler = tabhandler, + caption = caption + } + table.insert(mobf_settings.tabs,tab_to_add) +end + + +mobf_settings.register_tab("Known Mobs",true, mobf_settings.handle_main_tab) +mobf_settings.register_tab("Settings", true, mobf_settings.handle_settings_tab) +mobf_settings.register_tab("Tools", false,mobf_settings.handle_tools_tab) + ------------------------------------------------------------------------------ -- register handler for pressed buttons ------------------------------------------------------------------------------ -minetest.register_on_player_receive_fields(function(player, formname, fields) - --if one of your page buttons is pressed show another moblist page - if mobf_settings.set_mob_list_page(player,fields) then - mobf_settings_debug("mobf_settings: abort button processing") - return true - end - - --handle tool buttons (no redraw of menu as this could be done by fct - if mobf_settings.handle_tool_button(player,fields) then - mobf_settings_debug("mobf_settings: abort button processing") - return true - end - - --handle menu buttons - if mobf_settings.handle_config_changed_button(fields) or - fields.mobf_tools ~= nil or fields.mobf_restart_required ~= nil then - local page = "mobf_restart_required" - if fields.mobf_tools ~= nil then - page = "mobf_tools" - mobf_settings_debug("MOBF_SETTINGS: show tool page") - else - mobf_settings_debug("MOBF_SETTINGS: settings have been changed, show settings page: " .. dump(fields.mobf_restart_required)) - end - - mobf_settings.formspechandler(player, mobf_settings.get_formspec(player,page)) - mobf_settings_debug("mobf_settings: abort button processing") - return true - end - - local blacklist_changed_page = mobf_settings.handle_mob_en_disable_button(fields) - - if blacklist_changed_page ~= nil then - mobf_settings.formspechandler(player, mobf_settings.get_formspec(player,blacklist_changed_page)) - mobf_settings_debug("mobf_settings: abort button processing") - return true - end - - return false -end) - +minetest.register_on_player_receive_fields(mobf_settings.handle_event) --register chatcommand minetest.register_chatcommand("mobf_settings", @@ -609,45 +607,8 @@ minetest.register_chatcommand("mobf_settings", description = "show mobf settings" , privs = {}, func = function(name,param) - local player = minetest.env:get_player_by_name(name) - mobf_settings.formspechandler(player,mobf_settings.get_formspec(player,"mobf_list_page1")) + local player = minetest.get_player_by_name(name) + mobf_settings.handle_event(player,mobf_settings.formname,{btn_1_init="init"}) end }) - ------------------------------------------------------------------------------- --- register mobf_settings buttons ------------------------------------------------------------------------------- -mobf_settings.register_config_button(1,"mobf_disable_animal_spawning","Animal spawning",true) -mobf_settings.register_config_button(1,"mobf_disable_3d_mode","3D mode",true) -mobf_settings.register_config_button(1,"mobf_animal_spawning_secondary","Secondary spawning algorithm",false) -mobf_settings.register_config_button(1,"mobf_delete_disabled_mobs","Delete disabled mob entities",false) -mobf_settings.register_config_button(1,"mobf_log_bug_warnings","Show noisy bug warnings",false) -mobf_settings.register_config_button(1,"vombie_3d_burn_animation_enabled","Vombie 3d burn animation",false) -mobf_settings.register_config_button(1,"mobf_log_removed_entities","Log all removed mobs",false) -mobf_settings.register_config_button(1,"mobf_grief_protection","Disallow mob stealing",false) -mobf_settings.register_config_button(2,"mobf_lifebar","lifebar",false) - -mobf_settings.register_tool_button(1,"give_pathmaker_tool","Give pathmaker tool", - function(player) - player:get_inventory():add_item("main", "mobf:path_marker 1") - end) - -mobf_settings.register_tool_button(1,"show_mobstore","Show preserved mobs", - function(player) - local name = player:get_player_name() - - if name ~= nil then - mob_preserve.handle_command(name,nil) - end - end) - -mobf_settings.register_tool_button(1,"show_pathmanager","Manage paths", - function(player) - local name = player:get_player_name() - - if name ~= nil then - mobf_path.show_manage_menu(name,nil) - end - end) - -minetest.log("action","MOD: mobf_settings mod version "..mobf_settings.version.." loaded") +minetest.log("action","MOD: mobf_settings mod version "..mobf_settings.version.." loaded") \ No newline at end of file diff --git a/mobf_settings/init_old.lua b/mobf_settings/init_old.lua new file mode 100644 index 0000000..f1938fc --- /dev/null +++ b/mobf_settings/init_old.lua @@ -0,0 +1,653 @@ +------------------------------------------------------------------------------- +-- Mob Framework Settings Mod by Sapier +-- +-- You may copy, use, modify or do nearly anything except removing this +-- copyright notice. +-- And of course you are NOT allow to pretend you have written it. +-- +--! @file init.lua +--! @brief settings gui for mobf +--! @copyright Sapier +--! @author Sapier +--! @date 2012-12-27 +-- +-- Contact sapier a t gmx net +------------------------------------------------------------------------------- +minetest.log("action","MOD: mobf_settings mod loading ... ") + +mobf_settings = {} +mobf_settings.version = "0.0.21" +mobf_settings.max_list_page_num = 5 +mobf_settings.buttons = {} +mobf_settings.buttons[1] = {} +mobf_settings.buttons[2] = {} +mobf_settings.tool_buttons = {} +mobf_settings.tool_buttons[1] = {} +mobf_settings.tool_buttons[2] = {} +mobf_settings.menubutton = "button_exit[11,9.5;2,0.5;main; Exit]" +mobf_settings.formspechandler = function(player,formspec) + name = player:get_player_name() + minetest.show_formspec(name,"mobf_settings:mainform",formspec) + end + +mobf_settings_debug = function () end + +------------------------------------------------------------------------------ +-- name: get_animal_list +-- +--! @brief get animal list form element for a page +--! @ingroup mobf_settings +-- +--! @param page_number number of page to get list for +--! +--! @return formspec for page +------------------------------------------------------------------------------- +function mobf_settings.get_animal_list(page_number) + + local mobf_mob_blacklist_string = minetest.world_setting_get("mobf_blacklist") + local mobf_mobs_blacklisted = nil + if mobf_mob_blacklist_string ~= nil then + mobf_mobs_blacklisted = minetest.deserialize(mobf_mob_blacklist_string) + end + + local retval = "" + local line = 3 + + local start_at = page_number -1 + + for i,val in ipairs(mobf_rtd.registred_mob) do + + if i > (start_at*16) then + if i <= (start_at*16 + 8) then + retval = retval .. "label[1.0," .. line .. ";" .. val .. "]" + local line_btn = line + 0.25 + if contains(mobf_mobs_blacklisted,val) then + retval = retval .. "button[0.5," .. line_btn .. ";0.5,0.25;page"..page_number.."_enable_" .. val .. "; ]" + else + retval = retval .. "button[0.5," .. line_btn .. ";0.5,0.25;page"..page_number.."_disable_" .. val .. ";x]" + end + end + + if i > (start_at*16 + 8 ) and + i <= (start_at*16 + 16) then + + local temp_line = line - (8*0.75) + retval = retval .. "label[7.0," .. temp_line .. ";" .. val .. "]" + + local line_btn = temp_line +0.25 + if contains(mobf_mobs_blacklisted,val) then + retval = retval .. "button[6.5," .. line_btn .. ";0.5,0.25;page"..page_number.."_enable_" .. val .. "; ]" + else + retval = retval .. "button[6.5," .. line_btn .. ";0.5,0.25;page"..page_number.."_disable_" .. val .. ";x]" + end + end + + line = line + 0.75 + end + end + + return retval +end + + +------------------------------------------------------------------------------ +-- name: contains +-- +--! @brief check if element is in table +--! @ingroup mobf_settings +-- +--! @param cur_table table to check for element +--! @param element element to find in table +--! +--! @return true/false +------------------------------------------------------------------------------- +function contains(cur_table,element) + + if cur_table == nil then + --print("looking in empty table") + return false + end + + --print("looking for " .. dump(element) .. " in " .. dump(cur_table)) + + for i,v in ipairs(cur_table) do + if v == element then + --print("found: " .. element .. " in table") + return true + end + end + + --print("didn't find " .. element) + return false +end + +------------------------------------------------------------------------------ +-- name: contains_key +-- +--! @brief check if table contains key +--! @ingroup mobf_settings +-- +--! @param cur_table table to check for element +--! @param element element to find in table +--! +--! @return true/false +------------------------------------------------------------------------------- +function get_value(cur_table,key) + + if cur_table == nil or + key == nil then + --print("looking in empty table") + return nil + end + + --print("looking for " .. dump(element) .. " in " .. dump(cur_table)) + + for k,v in pairs(cur_table) do + if k == key then + --print("found: " .. element .. " in table") + return v + end + end + + --print("didn't find " .. element) + return nil +end + + +------------------------------------------------------------------------------ +-- name: get_known_animals_form +-- +--! @brief create page to be shown +--! @ingroup mobf_settings +-- +--! @param page name of page +--! +--! @return formspec of page +------------------------------------------------------------------------------- +function mobf_settings.get_main_settings_form(page) + local retval = "" + + for i=0,mobf_settings.max_list_page_num,1 do + if page == "mobf_list_page" .. i then + local nextpage = i +1 + local prevpage = i -1 + retval = "label[0.5,2.25;Known Mobs, Page ".. i .. "]" + .."label[0.5,2.5;-------------------------------------------]" + .."label[6.5,2.5;----------------------------------------]" + .. mobf_settings.get_animal_list(i) + + if i ~= mobf_settings.max_list_page_num then + retval = retval .."button[3,9.5;2,0.5;mobf_list_page" .. nextpage ..";Next]" + end + if i ~= 1 then + retval = retval .."button[0.5,9.5;2,0.5;mobf_list_page" .. prevpage ..";Prev]" + end + + return retval + end + end + + if page == "mobf_restart_required" then + retval = "label[0.5,2.25;This settings require to restart Game!]" + .."label[0.5,2.5;-------------------------------------------]" + .."label[6.5,2.5;----------------------------------------]" + + retval = retval .. mobf_settings.draw_buttons(mobf_settings.buttons[1],0.5) + retval = retval .. mobf_settings.draw_buttons(mobf_settings.buttons[2],6.5) + + return retval + end + + if page == "mobf_tools" then + retval = "label[0.5,2.25;Tools to be used with mobf]" + .."label[0.5,2.5;-------------------------------------------]" + .."label[6.5,2.5;----------------------------------------]" + + retval = retval .. mobf_settings.draw_tool_buttons(mobf_settings.tool_buttons[1],0.5) + retval = retval .. mobf_settings.draw_tool_buttons(mobf_settings.tool_buttons[2],6.5) + + return retval + end + + return "" +end + +------------------------------------------------------------------------------ +-- name: draw_buttons +-- +--! @brief get formspec for button drawing +--! @ingroup mobf_settings +-- +--! @param buttons buttons to show +--! @param xpos pos to show buttons at +--! +--! @return formspec for button list +------------------------------------------------------------------------------- +function mobf_settings.draw_buttons(buttons,xpos) + local retval = "" + + local y_pos = 3.75 + + for i=1,#buttons,1 do + local current_setting = minetest.world_setting_get(buttons[i].value) + + if buttons[i].inverted then + if not current_setting then + retval = retval .. "button[" .. xpos .. ",".. y_pos .. ";6,0.5;" .. + "en_" .. buttons[i].value .. ";" .. + buttons[i].text .. " is enabled]" + else + retval = retval .. "button[" .. xpos .. ",".. y_pos .. ";6,0.5;" .. + "dis_" .. buttons[i].value .. ";" .. + buttons[i].text .. " is disabled]" + end + + else + if current_setting then + retval = retval .. "button[" .. xpos .. ",".. y_pos .. ";6,0.5;" .. + "dis_" .. buttons[i].value .. ";" .. + buttons[i].text .. " is enabled]" + else + retval = retval .. "button[" .. xpos .. ",".. y_pos .. ";6,0.5;" .. + "en_" .. buttons[i].value .. ";" .. + buttons[i].text .. " is disabled]" + end + end + + y_pos = y_pos + 0.75 + end + + return retval +end + +------------------------------------------------------------------------------ +-- name: draw_tool_buttons +-- +--! @brief get formspec for button drawing +--! @ingroup mobf_settings +-- +--! @param buttons buttons to show +--! @param xpos pos to show buttons at +--! +--! @return formspec for button list +------------------------------------------------------------------------------- +function mobf_settings.draw_tool_buttons(buttons,xpos) + local retval = "" + + local y_pos = 3.75 + + for i=1,#buttons,1 do + + retval = retval .. "button[" .. xpos .. ",".. y_pos .. ";6,0.5;" .. + buttons[i].id .. ";" .. + buttons[i].text .."]" + + y_pos = y_pos + 0.75 + end + + return retval +end + +------------------------------------------------------------------------------ +-- name: handle_mob_en_disable_button +-- +--! @brief handle press of en_disable button for a mob +--! @ingroup mobf_settings +-- +--! @param fields +--! +--! @return +------------------------------------------------------------------------------- +function mobf_settings.handle_mob_en_disable_button(fields) + for i,val in ipairs(mobf_rtd.registred_mob) do + + local page = nil + + for i = 0 , 5 , 1 do + if fields["page".. i .. "_enable_" .. val] ~= nil then + local mobf_mob_blacklist_string = minetest.world_setting_get("mobf_blacklist") + local mobf_mobs_blacklisted = nil + if mobf_mob_blacklist_string ~= nil then + mobf_mobs_blacklisted = minetest.deserialize(mobf_mob_blacklist_string) + end + + if mobf_mobs_blacklisted == nil then + mobf_settings_debug("MOBF_SETTINGS: trying to enable mob but no mobs were blacklisted!?") + else + + local new_blacklist = {} + + for i,v in ipairs(mobf_mobs_blacklisted) do + if v ~= val then + table.insert(new_blacklist,v) + end + end + + minetest.world_setting_set("mobf_blacklist",minetest.serialize(new_blacklist)) + mobf_settings_debug("MOBF_SETTINGS: Enabling: " .. val .. " blacklist is now: " .. dump(new_blacklist)) + end + page = i + end + end + + for i = 0 , 5 , 1 do + if fields["page".. i .. "_disable_" .. val] ~= nil then + + local mobf_mob_blacklist_string = minetest.world_setting_get("mobf_blacklist") + local mobf_mobs_blacklisted = nil + if mobf_mob_blacklist_string ~= nil then + mobf_mobs_blacklisted = minetest.deserialize(mobf_mob_blacklist_string) + end + + if mobf_mobs_blacklisted == nil then + mobf_mobs_blacklisted = {} + end + + table.insert(mobf_mobs_blacklisted,val) + + minetest.world_setting_set("mobf_blacklist",minetest.serialize(mobf_mobs_blacklisted)) + page = i + mobf_settings_debug("MOBF_SETTINGS: Disabling: " .. val) + end + end + + if page ~= nil then + return "mobf_list_page" .. page + end + end + return nil +end + + +------------------------------------------------------------------------------ +-- name: handle_config_changed_button +-- +--! @brief handle press of a settings button +--! @ingroup mobf_settings +-- +--! @param fields +--! +--! @return +------------------------------------------------------------------------------- +function mobf_settings.handle_config_changed_button(fields) + + local config_setting = nil + local enable = false + + for j=1,2,1 do + for i=1,#mobf_settings.buttons[j],1 do + local fieldname = "en_" .. mobf_settings.buttons[j][i].value + if fields[fieldname] ~= nil then + config_setting = mobf_settings.buttons[j][i] + enable = true + break + end + + fieldname = "dis_" .. mobf_settings.buttons[j][i].value + if fields[fieldname] ~= nil then + config_setting = mobf_settings.buttons[j][i] + enable = false + break + end + end + end + + if config_setting ~= nil then + mobf_settings_debug("MOBF_SETTINGS: detected changed value " .. config_setting.value) + if enable then + minetest.world_setting_set(config_setting.value,"true") + else + minetest.world_setting_set(config_setting.value,"false") + end + return true + end + + return false +end + + +------------------------------------------------------------------------------ +-- name: handle_tool_button +-- +--! @brief handle press of a settings button +--! @ingroup mobf_settings +-- +--! @param player whoever clicked the button +--! @param fields +--! +--! @return +------------------------------------------------------------------------------- +function mobf_settings.handle_tool_button(player,fields) + + for i=1,2,1 do + for j=1,#mobf_settings.tool_buttons[i],1 do + local id = nil + + if mobf_settings.tool_buttons[i][j] ~= nil then + id = mobf_settings.tool_buttons[i][j].id + end + + local value = get_value(fields,id) + if value ~= nil then + + if type(mobf_settings.tool_buttons[i][j].param) == "function" then + mobf_settings.tool_buttons[i][j].param(player,fields) + else + mobf_settings_debug("MOBF_SETTINGS: invalid use of tool_button") + end + return true + end + end + end + return false +end + +------------------------------------------------------------------------------ +-- name: get_formspec +-- +--! @brief generate page form for mobf_settings +--! @ingroup mobf_settings +-- +--! @param player player to create page for +--! @param page pagename to create +------------------------------------------------------------------------------- +function mobf_settings.get_formspec(player,page) + local version = "< 1.4.5" + + if (type(mobf_get_version) == "function") then + version = mobf_get_version() + end + + local playername = player:get_player_name() + + if minetest.check_player_privs(playername, {mobfw_admin=true}) then + local pageform = mobf_settings.get_main_settings_form(page) + + return "size[13,10]" + ..mobf_settings.menubutton + .."button[0.5,0.75;3,0.5;mobf_list_page1; Known Mobs ]" + .."button[4,0.75;3,0.5;mobf_restart_required; Settings ]" + .."button[7.5,0.75;3,0.5;mobf_tools; Tools ]" + .."label[5.5,0;MOBF " .. version .. "]" + .. pageform + else + local pageform = mobf_settings.get_main_settings_form("mobf_tools") + return "size[13,10]" + ..mobf_settings.menubutton + .."label[0.5,0.75;You are not allowed to change any setting!]" + .."label[5.5,0;MOBF " .. version .. "]" + ..pageform + end + +end + + +------------------------------------------------------------------------------ +-- name: set_mob_list_page(fields) +-- +--! @brief check if requested page is a list page and show it +--! @ingroup mobf_settings +-- +--! @oaram player +--! @param fields data for callback +-- +--! @return true if handled false if not +------------------------------------------------------------------------------- +function mobf_settings.set_mob_list_page(player,fields) + if fields.mobf then + mobf_settings.formspechandler(player, mobf_settings.get_formspec(player,"mobf_list_page1")) + return true + end + + + for i=1,5,1 do + local namestring = "mobf_list_page" .. i + + if fields[namestring] ~= nil then + mobf_settings.formspechandler(player, mobf_settings.get_formspec(player,namestring)) + return true + end + end + + return false +end + +------------------------------------------------------------------------------ +-- name: register_config_button(index,configvalue,buttontext,inverted) +-- +--! @brief register a button to be shown on config page +--! @ingroup mobf_settings +-- +--! @param index column to draw button at +--! @param configvalue config value to change by this button +--! @param buttontext to set for this value +--! @param inverted invert enable/disable text on button +-- +------------------------------------------------------------------------------- +function mobf_settings.register_config_button(index,configvalue,buttontext,inverted) + + local toadd = { + value = configvalue, + text = buttontext, + inverted = inverted, + } + + table.insert(mobf_settings.buttons[index],toadd) +end + +------------------------------------------------------------------------------ +-- name: register_tool_button(index,id,buttontext,param) +-- +--! @brief register a button to be shown on config page +--! @ingroup mobf_settings +-- +--! @param index column to draw button at +--! @param id to use for button (has to be unique) +--! @param buttontext to set for this value +--! @param param function to call +-- +------------------------------------------------------------------------------- +function mobf_settings.register_tool_button(index,id,buttontext,param) + + local toadd = { + param = param, + text = buttontext, + id = id, + } + + table.insert(mobf_settings.tool_buttons[index],toadd) +end + +------------------------------------------------------------------------------ +-- register handler for pressed buttons +------------------------------------------------------------------------------ +minetest.register_on_player_receive_fields(function(player, formname, fields) + --if one of your page buttons is pressed show another moblist page + if mobf_settings.set_mob_list_page(player,fields) then + mobf_settings_debug("mobf_settings: abort button processing") + return true + end + + --handle tool buttons (no redraw of menu as this could be done by fct + if mobf_settings.handle_tool_button(player,fields) then + mobf_settings_debug("mobf_settings: abort button processing") + return true + end + + --handle menu buttons + if mobf_settings.handle_config_changed_button(fields) or + fields.mobf_tools ~= nil or fields.mobf_restart_required ~= nil then + local page = "mobf_restart_required" + if fields.mobf_tools ~= nil then + page = "mobf_tools" + mobf_settings_debug("MOBF_SETTINGS: show tool page") + else + mobf_settings_debug("MOBF_SETTINGS: settings have been changed, show settings page: " .. dump(fields.mobf_restart_required)) + end + + mobf_settings.formspechandler(player, mobf_settings.get_formspec(player,page)) + mobf_settings_debug("mobf_settings: abort button processing") + return true + end + + local blacklist_changed_page = mobf_settings.handle_mob_en_disable_button(fields) + + if blacklist_changed_page ~= nil then + mobf_settings.formspechandler(player, mobf_settings.get_formspec(player,blacklist_changed_page)) + mobf_settings_debug("mobf_settings: abort button processing") + return true + end + + return false +end) + + +--register chatcommand +minetest.register_chatcommand("mobf_settings", + { + params = "", + description = "show mobf settings" , + privs = {}, + func = function(name,param) + local player = minetest.get_player_by_name(name) + mobf_settings.formspechandler(player,mobf_settings.get_formspec(player,"mobf_list_page1")) + end + }) + +------------------------------------------------------------------------------ +-- register mobf_settings buttons +------------------------------------------------------------------------------ +mobf_settings.register_config_button(1,"mobf_disable_animal_spawning","Animal spawning",true) +mobf_settings.register_config_button(1,"mobf_disable_3d_mode","3D mode",true) +mobf_settings.register_config_button(1,"mobf_animal_spawning_secondary","Secondary spawning algorithm",false) +mobf_settings.register_config_button(1,"mobf_delete_disabled_mobs","Delete disabled mob entities",false) +mobf_settings.register_config_button(1,"mobf_log_bug_warnings","Show noisy bug warnings",false) +mobf_settings.register_config_button(1,"vombie_3d_burn_animation_enabled","Vombie 3d burn animation",false) +mobf_settings.register_config_button(1,"mobf_log_removed_entities","Log all removed mobs",false) +mobf_settings.register_config_button(1,"mobf_grief_protection","Disallow mob stealing",false) +mobf_settings.register_config_button(2,"mobf_lifebar","lifebar",false) + +mobf_settings.register_tool_button(1,"give_pathmaker_tool","Give pathmaker tool", + function(player) + player:get_inventory():add_item("main", "mobf:path_marker 1") + end) + +mobf_settings.register_tool_button(1,"show_mobstore","Show preserved mobs", + function(player) + local name = player:get_player_name() + + if name ~= nil then + mob_preserve.handle_command(name,nil) + end + end) + +mobf_settings.register_tool_button(1,"show_pathmanager","Manage paths", + function(player) + local name = player:get_player_name() + + if name ~= nil then + mobf_path.show_manage_menu(name,nil) + end + end) + +minetest.log("action","MOD: mobf_settings mod version "..mobf_settings.version.." loaded") diff --git a/trap/init.lua b/trap/init.lua index d3c9853..7419059 100644 --- a/trap/init.lua +++ b/trap/init.lua @@ -9,7 +9,7 @@ minetest.register_craftitem("trap:undead", { if pointed_thing.type == "node" then local pos = pointed_thing.above - local newobject = minetest.env:add_entity(pos,"trap:undead_ent") + local newobject = minetest.add_entity(pos,"trap:undead_ent") item:take_item() @@ -43,7 +43,7 @@ minetest.register_entity(":trap:undead_ent", local pos = self.object:getpos() - local objectlist = minetest.env:get_objects_inside_radius(pos,2) + local objectlist = minetest.get_objects_inside_radius(pos,2) for index,value in pairs(objectlist) do @@ -57,7 +57,7 @@ minetest.register_entity(":trap:undead_ent", self.object:remove() - minetest.env:add_node(pos,{name="trap:cought_vombie"}) + minetest.add_node(pos,{name="trap:cought_vombie"}) end end