fixed crafting guide + limited mobs in the world to avoid lags

This commit is contained in:
cale 2016-08-20 12:02:52 +02:00
parent 4dac1bd8e8
commit 8e3d28ebd1
2 changed files with 36 additions and 6 deletions

View File

@ -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)

View File

@ -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