From 85f2692ef04fd11de9b21d10f67e352052eb381e Mon Sep 17 00:00:00 2001
From: RealBadAngel <mk@realbadangel.pl>
Date: Sat, 20 Apr 2013 08:14:12 +0200
Subject: [PATCH] range fix again

---
 technic/battery_box_mv.lua |  134 ++++++++++++++++++++++++++++----------------
 1 files changed, 84 insertions(+), 50 deletions(-)

diff --git a/technic/battery_box_mv.lua b/technic/battery_box_mv.lua
index ae448e0..8fc6dc7 100644
--- a/technic/battery_box_mv.lua
+++ b/technic/battery_box_mv.lua
@@ -1,3 +1,14 @@
+MV_machines = {}
+
+registered_MV_machines_count=0
+
+function register_MV_machine (string1,string2)
+registered_MV_machines_count=registered_MV_machines_count+1
+MV_machines[registered_MV_machines_count]={}
+MV_machines[registered_MV_machines_count].machine_name=string1
+MV_machines[registered_MV_machines_count].machine_type=string2
+end
+
 minetest.register_craft({
 	output = 'technic:mv_battery_box 1',
 	recipe = {
@@ -6,8 +17,6 @@
 		{'', 'technic:mv_cable', ''},
 	}
 }) 
-
-
 
 mv_battery_box_formspec =
 	"invsize[8,9;]"..
@@ -76,7 +85,7 @@
 		battery_charge = 0
 		max_charge = 300000
 		last_side_shown=0
-		end,	
+		end,
 	can_dig = function(pos,player)
 		local meta = minetest.env:get_meta(pos);
 		local inv = meta:get_inventory()
@@ -113,51 +122,73 @@
 	meta:set_float("last_side_shown",i)
 	end
 
---loading registered power tools	
+--loading registered power tools
 	local inv = meta:get_inventory()
 	if inv:is_empty("src")==false  then 
-		srcstack = inv:get_stack("src", 1)
-		src_item=srcstack:to_table()
-		item_meta=srcstack:get_metadata()
-		if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before tool/item
+		local srcstack = inv:get_stack("src", 1)
+		local src_item=srcstack:to_table()
+		local src_meta=get_item_meta(src_item["metadata"])
 
-	local item_max_charge = nil
-	local counter=registered_power_tools_count-1
-	for i=1, counter,1 do
-		if power_tools[i].tool_name==src_item["name"] then
-		item_max_charge=power_tools[i].max_charge	
+		local item_max_charge=nil
+		for i=1,registered_power_tools_count,1 do
+			if power_tools[i].tool_name==src_item["name"] then
+				src_meta=get_item_meta(src_item["metadata"])
+				if src_meta==nil then 
+					src_meta={}
+					src_meta["technic_power_tool"]=true
+					src_meta["charge"]=0
+				else 
+					if src_meta["technic_power_tool"]==nil then
+						src_meta["technic_power_tool"]=true
+						src_meta["charge"]=0
+					end
+				end
+				item_max_charge=power_tools[i].max_charge
+			end
 		end
-		end
-	if item_max_charge then
-		load1=tonumber((src_item["metadata"])) 
-		load_step=4000
-		if load1<item_max_charge and charge>0 then 
-		 if charge-load_step<0 then load_step=charge end
-		 if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end
-		load1=load1+load_step
-		charge=charge-load_step
-		set_RE_wear(src_item,load1,item_max_charge)
-		src_item["metadata"]=tostring(load1)
-		inv:set_stack("src", 1, src_item)
-		end
-		meta:set_int("battery_charge",charge)
-	end	
+		
+		if item_max_charge then
+			load1=src_meta["charge"] 
+			load_step=4000
+			if load1<item_max_charge and charge>0 then 
+				if charge-load_step<0 then load_step=charge end
+				if load1+load_step>item_max_charge then load_step=item_max_charge-load1 end
+				load1=load1+load_step
+				charge=charge-load_step
+				set_RE_wear(src_item,load1,item_max_charge)
+				src_meta["charge"]=load1
+				src_item["metadata"]=set_item_meta(src_meta)
+				inv:set_stack("src", 1, src_item)
+			end
+			meta:set_int("battery_charge",charge)
+		end	
 	end
 	
 -- dischargin registered power tools
 		if inv:is_empty("dst") == false then 
 		srcstack = inv:get_stack("dst", 1)
 		src_item=srcstack:to_table()
-		local item_max_charge = nil
-		local counter=registered_power_tools_count-1
-		for i=1, counter,1 do
-		if power_tools[i].tool_name==src_item["name"] then
-		item_max_charge=power_tools[i].max_charge	
+		local src_meta=get_item_meta(src_item["metadata"])
+		local item_max_charge=nil
+		for i=1,registered_power_tools_count,1 do
+			if power_tools[i].tool_name==src_item["name"] then
+				src_meta=get_item_meta(src_item["metadata"])
+				if src_meta==nil then 
+					src_meta={}
+					src_meta["technic_power_tool"]=true
+					src_meta["charge"]=0
+				else 
+					if src_meta["technic_power_tool"]==nil then
+						src_meta["technic_power_tool"]=true
+						src_meta["charge"]=0
+					end
+				end
+				item_max_charge=power_tools[i].max_charge
+			end
 		end
-		end
+
 		if item_max_charge then
-		if src_item["metadata"]=="" then src_item["metadata"]="0" end --create meta for not used before battery/crystal
-		local load1=tonumber((src_item["metadata"])) 
+		local load1=src_meta["charge"] 
 		load_step=4000
 		if load1>0 and charge<max_charge then 
 			 if charge+load_step>max_charge then load_step=max_charge-charge end
@@ -165,7 +196,8 @@
 		load1=load1-load_step
 		charge=charge+load_step
 		set_RE_wear(src_item,load1,item_max_charge)
-		src_item["metadata"]=tostring(load1)	
+		src_meta["charge"]=load1
+		src_item["metadata"]=set_item_meta(src_meta)
 		inv:set_stack("dst", 1, src_item)
 		end		
 		end
@@ -173,19 +205,12 @@
 		
 	meta:set_int("battery_charge",charge)
 
-	local load = math.floor(charge/300000 * 100)
+	local load = math.floor((charge/300000) * 100)
 	meta:set_string("formspec",
-				"invsize[8,9;]"..
+				mv_battery_box_formspec..
 				"image[1,1;1,2;technic_power_meter_bg.png^[lowpart:"..
-						(load)..":technic_power_meter_fg.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;]")
+						(load)..":technic_power_meter_fg.png]"
+				)
 		
 	local pos1={}
 
@@ -316,6 +341,15 @@
 function check_MV_node_subp (PR_nodes,RE_nodes,MV_nodes,pos1)
 meta = minetest.env:get_meta(pos1)
 if meta:get_float("mv_cablelike")==1 then new_node_added=add_new_MVcable_node(MV_nodes,pos1) end
-if minetest.env:get_node(pos1).name == "technic:solar_panel_mv" then 	new_node_added=add_new_MVcable_node(PR_nodes,pos1) end		
+for i in ipairs(MV_machines) do
+	if minetest.env:get_node(pos1).name == MV_machines[i].machine_name then 
+		if MV_machines[i].machine_type == "PR" then
+			new_node_added=add_new_MVcable_node(PR_nodes,pos1) 
+			end
+		if MV_machines[i].machine_type == "RE" then
+			new_node_added=add_new_MVcable_node(RE_nodes,pos1) 
+			end
+	end
 end
-		
+end
+

--
Gitblit v1.8.0