diff --git a/vexcazer_con/init.lua b/vexcazer_con/init.lua index 7176889..b181607 100644 --- a/vexcazer_con/init.lua +++ b/vexcazer_con/init.lua @@ -1,4 +1,4 @@ -vexcazer_con={jobs={},user={},max_admin=3000,max_mod=495,max_default=99,max_dis_admin=6,max_dis_mod=3,max_dis_default=2} +vexcazer_con={jobs={},user={},max_dis=100000,dis_done=0,max_jobs_done=1000,jobs_done=0,max_world=30000,max_admin=3000,max_mod=495,max_default=99,max_dis_admin=6,max_dis_mod=3,max_dis_default=2} vexcazer_con.counter=function(a) local b=0 @@ -9,8 +9,9 @@ vexcazer_con.counter=function(a) end vexcazer_con.run=function() + vexcazer_con.jobs_done=0 + vexcazer_con.dis_done=0 for i, a in pairs(vexcazer_con.user) do - if not (a.name and a.count>1 and vexcazer_con.counter(a.jobs)>0) then vexcazer_con.user[a.name]=nil vexcazer_con.run() @@ -18,7 +19,7 @@ vexcazer_con.run=function() end for xyz, pos in pairs(a.jobs) do - if os.clock()-a.time>5 then + if os.clock()-a.time>a.maxdelay then minetest.chat_send_player(a.name, " using aborted, took more then 5 sec (" .. (os.clock()-a.time) ..")") vexcazer_con.user[a.name]=nil vexcazer_con.run() @@ -41,11 +42,22 @@ vexcazer_con.run=function() if minetest.get_node(n).name==a.node then vexcazer_con.user[a.name].jobs[n.x .. "." .. n.y .."." ..n.z]=n end + vexcazer_con.dis_done=vexcazer_con.dis_done+1 end end end vexcazer_con.user[a.name].jobs[xyz]=nil + vexcazer_con.jobs_done=vexcazer_con.jobs_done+1 + + if vexcazer_con.jobs_done>vexcazer_con.max_jobs_done or vexcazer_con.dis_done>vexcazer_con.max_dis then + minetest.after(0.1, function() + vexcazer_con.run() + return + end) + return + end end + vexcazer_con.dis_done=0 if vexcazer_con.counter(vexcazer_con.user[a.name].jobs)<1 then vexcazer_con.user[a.name]=nil vexcazer_con.run() @@ -53,8 +65,9 @@ vexcazer_con.run=function() end end if vexcazer_con.counter(vexcazer_con.user)>0 then - - minetest.after((0.1), function() + vexcazer_con.jobs_done=0 + vexcazer_con.dis_done=0 + minetest.after(0.1, function() vexcazer_con.run() return end) @@ -75,10 +88,13 @@ vexcazer.registry_mode({ if pointed_thing.type~="node" then return itemstack end local count=user:get_inventory():get_stack("main", input.index-1):get_count() local dis=user:get_inventory():get_stack("main", input.index+1):get_count() + local maxdelay=5 if count==0 then count=9 - elseif count>input.max_amount then - if input.admin then + elseif count>=input.max_amount then + if input.world then + count=vexcazer_con.max_world + elseif input.admin then count=vexcazer_con.max_admin elseif input.mod then count=vexcazer_con.max_mod @@ -86,10 +102,13 @@ vexcazer.registry_mode({ count=vexcazer_con.max_default end end + + if input.world then + maxdelay=30 + end + dis=dis+1 - --if dis==0 then - -- dis=1 - --else + if input.admin and dis>vexcazer_con.max_dis_admin then dis=vexcazer_con.max_dis_admin elseif input.mod and dis>vexcazer_con.max_dis_mod then @@ -115,7 +134,7 @@ vexcazer.registry_mode({ return end - vexcazer_con.user[name]={time=os.clock(),node=node,input=input,count=count,dis=dis,name=name,jobs={}} + vexcazer_con.user[name]={maxdelay=maxdelay,time=os.clock(),node=node,input=input,count=count,dis=dis,name=name,jobs={}} vexcazer_con.user[name].jobs[pos.x .."." .. pos.y .."." ..pos.z]=pos vexcazer_con.run() return itemstack @@ -126,15 +145,21 @@ vexcazer.registry_mode({ local count=user:get_inventory():get_stack("main", input.index-1):get_count() local item=user:get_inventory():get_stack("main", input.index-1):get_name() local dis=user:get_inventory():get_stack("main", input.index+1):get_count() - + local maxdelay=5 if not minetest.registered_nodes[item] then - item=input.lazer + if input.world then + item="air" + else + item=input.lazer + end end if count==0 then count=9 - elseif count>input.max_amount then - if input.admin then + elseif count>=input.max_amount then + if input.world then + count=vexcazer_con.max_world + elseif input.admin then count=vexcazer_con.max_admin elseif input.mod then count=vexcazer_con.max_mod @@ -142,10 +167,13 @@ vexcazer.registry_mode({ count=vexcazer_con.max_default end end + + if input.world then + maxdelay=30 + end + dis=dis+1 - --if dis==0 then - -- dis=1 - --else + if input.admin and dis>vexcazer_con.max_dis_admin then dis=vexcazer_con.max_dis_admin elseif input.mod and dis>vexcazer_con.max_dis_mod then @@ -166,7 +194,7 @@ vexcazer.registry_mode({ vexcazer_con.user[name].count=0 return end - vexcazer_con.user[name]={time=os.clock(),node=node,input=input,count=count,dis=dis,name=name,place={name=item},nolazer=true,jobs={}} + vexcazer_con.user[name]={maxdelay=maxdelay,time=os.clock(),node=node,input=input,count=count,dis=dis,name=name,place={name=item},nolazer=true,jobs={}} vexcazer_con.user[name].jobs[pos.x .."." .. pos.y .."." ..pos.z]=pos vexcazer_con.run() return itemstack diff --git a/vexcazer_massive/init.lua b/vexcazer_massive/init.lua index 5908d57..da8e387 100644 --- a/vexcazer_massive/init.lua +++ b/vexcazer_massive/init.lua @@ -19,12 +19,17 @@ local massive=function(itemstack, user, pointed_thing,input) if dig==false and minetest.registered_nodes[stack]==nil or stack_count==0 then return false end if stack_count_left==0 then stack_count_left=stack_count end if dig then pos=pointed_thing.under end + input.max_amount=vexcazer.round(input.max_amount/2) - if stack_count_left>input.max_amount then stack_count_left=stack_count end + if stack_count_left>input.max_amount then + stack_count_left=input.max_amount + end + if stack_count>input.max_amount then - minetest.sound_play("vexcazer_error", {pos = user:get_pos(), gain = 1.0, max_hear_distance = 10,}) + stack_count=input.max_amount + --minetest.sound_play("vexcazer_error", {pos = user:get_pos(), gain = 1.0, max_hear_distance = 10,}) minetest.chat_send_player(input.user_name, " Maximum count: " .. input.max_amount) - return false + --return false end local allblocks=(stack_count*stack_count)*stack_count_left diff --git a/vexcazer_nuke/init.lua b/vexcazer_nuke/init.lua index c8737c1..e1c6006 100644 --- a/vexcazer_nuke/init.lua +++ b/vexcazer_nuke/init.lua @@ -10,31 +10,49 @@ local nuke=function(itemstack, user, pointed_thing,input,a,g) else pos=user:get_pos() end - for i, ob in pairs(minetest.get_objects_inside_radius(pos, a)) do - if not (ob:is_player() and ob:get_player_name()==name) then - ob:set_hp(0) - ob:punch(ob,1,{full_punch_interval=1,damage_groups={fleshy=9000}}) - c=c+1 - end - end - for i, ob in pairs(minetest.get_objects_inside_radius(pos, a)) do - if not (ob:is_player() and ob:get_player_name()==name) then - local pos2=ob:get_pos() - local d=math.max(1,vector.distance(pos,pos2)) - local dmg=(8/d)*a - if ob:get_luaentity() then - ob:set_velocity({x=(pos2.x-pos.x)*dmg, y=(pos2.y-pos.y)*dmg, z=(pos2.z-pos.z)*dmg}) - elseif ob:is_player() then - local d=dmg/4 - local pos3={x=(pos2.x-pos.x)*d, y=(pos2.y-pos.y)*d, z=(pos2.z-pos.z)*d} - ob:set_pos({x=pos.x+pos3.x,y=pos.y+pos3.y,z=pos.z+pos3.z,}) + + if input.world then + for i, ob in pairs(minetest.get_objects_inside_radius(pos, 500)) do + if not (ob:is_player() and ob:get_player_name()==name) then + + if ob:is_player() then + ob:set_hp(0) + else + ob:remove() + end + c=c+1 end - c2=c2+1 end + minetest.chat_send_player(name, " removed objects: " .. c) + else + + for i, ob in pairs(minetest.get_objects_inside_radius(pos, a)) do + if not (ob:is_player() and ob:get_player_name()==name) then + ob:set_hp(0) + ob:punch(ob,1,{full_punch_interval=1,damage_groups={fleshy=9000}}) + c=c+1 + end + end + for i, ob in pairs(minetest.get_objects_inside_radius(pos, a)) do + if not (ob:is_player() and ob:get_player_name()==name) then + local pos2=ob:get_pos() + local d=math.max(1,vector.distance(pos,pos2)) + local dmg=(8/d)*a + if ob:get_luaentity() then + ob:set_velocity({x=(pos2.x-pos.x)*dmg, y=(pos2.y-pos.y)*dmg, z=(pos2.z-pos.z)*dmg}) + elseif ob:is_player() then + local d=dmg/4 + local pos3={x=(pos2.x-pos.x)*d, y=(pos2.y-pos.y)*d, z=(pos2.z-pos.z)*d} + ob:set_pos({x=pos.x+pos3.x,y=pos.y+pos3.y,z=pos.z+pos3.z,}) + end + c2=c2+1 + end + end + if c<0 then c=0 end + minetest.chat_send_player(name, " punched objects: " .. c .." pushed objects: " .. c2) end - if c<0 then c=0 end - minetest.chat_send_player(name, " punched objects: " .. c .." pushed objects: " .. c2) minetest.sound_play("vexcazer_nuke", {pos=pos, gain = g, max_hear_distance = a}) + end