From 2d7f750d9a734e2c84cc1ee14746a4ee2f8757e6 Mon Sep 17 00:00:00 2001 From: hdastwb <hdastwb@hdastwb.heliohost.org> Date: Wed, 24 Jul 2013 03:43:36 +0200 Subject: [PATCH] fixed a condition with mv machines so as to not power down machines with stuff to grind/smelt but nothing to tube out --- technic/machines/mv/battery_box.lua | 109 +++++++----------------------------------------------- 1 files changed, 14 insertions(+), 95 deletions(-) diff --git a/technic/machines/mv/battery_box.lua b/technic/machines/mv/battery_box.lua index e1295ce..86a1d78 100644 --- a/technic/machines/mv/battery_box.lua +++ b/technic/machines/mv/battery_box.lua @@ -9,16 +9,18 @@ }) local battery_box_formspec = - "invsize[8,9;]".. - "image[1,1;1,2;technic_power_meter_bg.png]".. - "list[current_name;src;3,1;1,1;]".. - "image[4,1;1,1;technic_battery_reload.png]".. - "list[current_name;dst;5,1;1,1;]".. - "label[0,0;MV_Battery box]".. - "label[3,0;Charge]".. - "label[5,0;Discharge]".. - "label[1,3;Power level]".. - "list[current_player;main;0,5;8,4;]" + "invsize[8,9;]".. + "image[1,1;1,2;technic_power_meter_bg.png]".. + "list[current_name;src;3,1;1,1;]".. + "list[current_name;dst;5,1;1,1;]".. + "label[0,0;MV Battery Box]".. + "label[3,0;Charge]".. + "label[5,0;Discharge]".. + "label[1,3;Power level]".. + "list[current_player;main;0,5;8,4;]".. + "background[-0.19,-0.25;8.4,9.75;ui_form_bg.png]".. + "background[0,0;8,4;ui_mv_battery_box.png]".. + "background[0,5;8,4;ui_main_inventory.png]" minetest.register_node( "technic:mv_battery_box", { @@ -78,89 +80,6 @@ }) end -local power_tools = technic.MV_power_tools - -local charge_MV_tools = function(meta, charge) - --charge registered power tools - local inv = meta:get_inventory() - if inv:is_empty("src")==false then - local srcstack = inv:get_stack("src", 1) - local src_item=srcstack:to_table() - local src_meta=get_item_meta(src_item["metadata"]) - - local toolname = src_item["name"] - if power_tools[toolname] ~= nil then - -- Set meta data for the tool if it didn't do it itself :-( - src_meta=get_item_meta(src_item["metadata"]) - if src_meta==nil then - src_meta={} - src_meta["technic_mv_power_tool"]=true - src_meta["charge"]=0 - else - if src_meta["technic_mv_power_tool"]==nil then - src_meta["technic_mv_power_tool"]=true - src_meta["charge"]=0 - end - end - -- Do the charging - local item_max_charge = power_tools[toolname] - local load = src_meta["charge"] - local load_step = 1000 -- how much to charge per tick - if load<item_max_charge and charge>0 then - if charge-load_step<0 then load_step=charge end - if load+load_step>item_max_charge then load_step=item_max_charge-load end - load=load+load_step - charge=charge-load_step - technic.set_RE_wear(src_item,load,item_max_charge) - src_meta["charge"] = load - src_item["metadata"] = set_item_meta(src_meta) - inv:set_stack("src", 1, src_item) - end - end - end - return charge -- return the remaining charge in the battery - end - -local discharge_MV_tools = function(meta, charge, max_charge) - -- discharging registered power tools - local inv = meta:get_inventory() - if inv:is_empty("dst") == false then - srcstack = inv:get_stack("dst", 1) - src_item=srcstack:to_table() - local src_meta=get_item_meta(src_item["metadata"]) - local toolname = src_item["name"] - if power_tools[toolname] ~= nil then - -- Set meta data for the tool if it didn't do it itself :-( - src_meta=get_item_meta(src_item["metadata"]) - if src_meta==nil then - src_meta={} - src_meta["technic_mv_power_tool"]=true - src_meta["charge"]=0 - else - if src_meta["technic_mv_power_tool"]==nil then - src_meta["technic_mv_power_tool"]=true - src_meta["charge"]=0 - end - end - -- Do the discharging - local item_max_charge = power_tools[toolname] - local load = src_meta["charge"] - local load_step = 4000 -- how much to discharge per tick - if load>0 and charge<max_charge then - if charge+load_step>max_charge then load_step=max_charge-charge end - if load-load_step<0 then load_step=load end - load=load-load_step - charge=charge+load_step - technic.set_RE_wear(src_item,load,item_max_charge) - src_meta["charge"]=load - src_item["metadata"]=set_item_meta(src_meta) - inv:set_stack("dst", 1, src_item) - end - end - end - return charge -- return the remaining charge in the battery - end - minetest.register_abm( { nodenames = {"technic:mv_battery_box","technic:mv_battery_box1","technic:mv_battery_box2","technic:mv_battery_box3","technic:mv_battery_box4", @@ -187,8 +106,8 @@ end -- Charging/discharging tools here - current_charge = charge_MV_tools(meta, current_charge) - current_charge = discharge_MV_tools(meta, current_charge, max_charge) + current_charge = charge_tools(meta, current_charge, 4000) + current_charge = discharge_tools(meta, current_charge, max_charge, 4000) -- Set a demand (we allow batteries to charge on less than the demand though) meta:set_int("MV_EU_demand", math.min(max_charge_rate, max_charge-current_charge)) -- Gitblit v1.8.0