From 8e3d28ebd1d81d8043f45176a5e368c55335410c Mon Sep 17 00:00:00 2001 From: cale Date: Sat, 20 Aug 2016 12:02:52 +0200 Subject: [PATCH] fixed crafting guide + limited mobs in the world to avoid lags --- mods/crafting_guide/init.lua | 29 ++++++++++++++++++++++++----- mods/mobs/init.lua | 13 ++++++++++++- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/mods/crafting_guide/init.lua b/mods/crafting_guide/init.lua index 8fe549c..87ed9d7 100644 --- a/mods/crafting_guide/init.lua +++ b/mods/crafting_guide/init.lua @@ -1,7 +1,7 @@ crafting_guide = {} -crafting_guide.form = "size[3,3;]"..default.gui_colors..default.gui_bg.."item_image_button[0,0;1,1;item_11;btn1;]item_image_button[1,0;1,1;item_21;btn2;]item_image_button[2,0;1,1;item_31;btn3;]item_image_button[0,1;1,1;item_12;btn4;]item_image_button[1,1;1,1;item_22;btn5;]item_image_button[2,1;1,1;item_32;btn6;]item_image_button[0,2;1,1;item_13;btn7;]item_image_button[1,2;1,1;item_23;btn8;]item_image_button[2,2;1,1;item_33;btn9;]"; -crafting_guide.form_back = "size[3,4;]"..default.gui_colors..default.gui_bg.."item_image_button[0,0;1,1;item_11;btn1;]item_image_button[1,0;1,1;item_21;btn2;]item_image_button[2,0;1,1;item_31;btn3;]item_image_button[0,1;1,1;item_12;btn4;]item_image_button[1,1;1,1;item_22;btn5;]item_image_button[2,1;1,1;item_32;btn6;]item_image_button[0,2;1,1;item_13;btn7;]item_image_button[1,2;1,1;item_23;btn8;]item_image_button[2,2;1,1;item_33;btn9;]button[0,3;3,1;btn_back;Back]"; +crafting_guide.form = "size[3,3;]"..default.gui_colors..default.gui_bg; +crafting_guide.form_back = "size[3,4;]"..default.gui_colors..default.gui_bg.."button[0,3;3,1;btn_back;Back]"; crafting_guide.form_items = "size[8,7]"..default.gui_colors..default.gui_bg.."button[0,6;3,1;btn_left;<]button[5,6;3,1;btn_right;>]" @@ -16,7 +16,15 @@ function crafting_guide.get_formspec(crafts,back_button) local y = 1 local j = 1 for i=1,9 do - str = string.gsub(str,"item_"..x..y, crafts[1].items[j] or "") + if (string.find((crafts[1].items[j] or ""),"group:") or 0) == 1 then + if crafts[1].items[j] then + str = str .. ("button["..(x-1)..","..(y-1)..";1,1;group_"..i..";"..string.sub(crafts[1].items[j], 7).."]") + else + str = str .. ("button["..(x-1)..","..(y-1)..";1,1;;]") + end + else + str = str .. ("item_image_button["..(x-1)..","..(y-1)..";1,1;"..(crafts[1].items[j] or "")..";"..(crafts[1].items[j] or "")..";]") + end j = j + 1 x = x+1 @@ -45,7 +53,7 @@ function crafting_guide.get_item_formspec(page) for _,name in ipairs(items) do if minetest.get_all_craft_recipes(name) and i < (8*6)*(page+1) then - if i > (8*6)*(page) then + if i > (8*6)*(page)-1 then str = str .. "item_image_button["..x..","..y..";1,1;"..name..";"..name..";]" x = x + 1 if x > 7 then @@ -62,7 +70,16 @@ end minetest.register_on_player_receive_fields(function(player, formname, fields) if formname == "crafting_guide:book" then if fields.btn_back then - minetest.show_formspec(player:get_player_name(), "crafting_guide:book_items", crafting_guide.get_item_formspec()) + minetest.show_formspec(player:get_player_name(), "crafting_guide:book_items", crafting_guide.get_item_formspec(crafting_guide.pages[player:get_player_name()])) + elseif fields.quit then + crafting_guide.pages[player:get_player_name()] = nil + else + for i,j in pairs(fields) do + local crafts = minetest.get_all_craft_recipes(i) + if crafts then + minetest.show_formspec(player:get_player_name(), "crafting_guide:book", crafting_guide.get_formspec(crafts,true)) + end + end end end if formname == "crafting_guide:book_items" then @@ -72,6 +89,8 @@ minetest.register_on_player_receive_fields(function(player, formname, fields) elseif fields.btn_right then crafting_guide.pages[player:get_player_name()] = crafting_guide.pages[player:get_player_name()] +1 minetest.show_formspec(player:get_player_name(), "crafting_guide:book_items", crafting_guide.get_item_formspec(crafting_guide.pages[player:get_player_name()])) + elseif fields.quit then + crafting_guide.pages[player:get_player_name()] = nil else for i,j in pairs(fields) do local crafts = minetest.get_all_craft_recipes(i) diff --git a/mods/mobs/init.lua b/mods/mobs/init.lua index 3696461..56228ae 100644 --- a/mods/mobs/init.lua +++ b/mods/mobs/init.lua @@ -1,5 +1,7 @@ mobs = {} mobs.mobs = {} +mobs.count = 0 + function mobs.get_velocity(v, yaw, y) local x = -math.sin(yaw) * v local z = math.cos(yaw) * v @@ -40,6 +42,7 @@ function mobs.register_mob(name, def) else minetest.spawn_item(self.object:getpos(), "money:silver_coin") end + mobs.count = mobs.count - 1 self.object:remove() end end @@ -170,7 +173,14 @@ end local timer = 0 minetest.register_globalstep(function(dtime) timer = timer + dtime; - if timer >= 5 then + if timer >= 10 then + print("[mobs] mob count = " .. tostring(mobs.count)) + if mobs.count > (#minetest.get_connected_players())*2 then + print("[mobs] canceled spawning") + timer = 0 + return + end + for _, player in pairs(minetest.get_connected_players()) do local p = player:getpos() local a = {-1, 1} @@ -179,6 +189,7 @@ minetest.register_globalstep(function(dtime) if minetest.get_node(vector.new(x, p.y+2, z)).name == "air" then local n = mobs.get_mob(xp.player_levels[player:get_player_name()]) minetest.add_entity(vector.new(x, p.y+2, z), n) + mobs.count = mobs.count +1 end end timer = 0