RealBadAngel
2013-03-11 d01564a19dec8dc4b6851495150e240d937ec6b3
commit | author | age
773382 1 -- default GUI page
R 2 stargate.default_page = "main"
d01564 3 stargate_network["players"]={}
773382 4 stargate.current_page={}
R 5
d01564 6 stargate.save_data = function(table_pointer)
R 7     local data = minetest.serialize( stargate_network[table_pointer] )
8     local path = minetest.get_worldpath().."/stargate_"..table_pointer..".data"
773382 9     local file = io.open( path, "w" )
R 10     if( file ) then
11         file:write( data )
12         file:close()
13         return true
14     else return nil
15     end
16 end
17
d01564 18 stargate.restore_data = function(table_pointer)
R 19     local path = minetest.get_worldpath().."/stargate_"..table_pointer..".data"
773382 20     local file = io.open( path, "r" )
R 21     if( file ) then
22         local data = file:read("*all")
d01564 23         stargate_network[table_pointer] = minetest.deserialize( data )
773382 24         file:close()
R 25     return true
26     else return nil
27     end
28 end
29
30 -- load Stargates network data
d01564 31 if stargate.restore_data("registered_players") ~= nil then
R 32     print(dump(stargate_network["registered_players"]))
33     for __,tab in ipairs(stargate_network["registered_players"]) do
34         if stargate.restore_data(tab["player_name"]) == nil  then
35             print ("[stargate] Error loading data!")
36         end
773382 37     end
d01564 38 else
R 39     print ("[stargate] Error loading data! Creating new file.")
40     stargate_network["registered_players"]={}
41     stargate.save_data("registered_players")
42     print(dump(stargate_network["registered_players"]))
773382 43 end
R 44
45 -- register_on_joinplayer
46 minetest.register_on_joinplayer(function(player)
47     local player_name = player:get_player_name()
d01564 48     local registered=nil
R 49     for __,tab in ipairs(stargate_network["registered_players"]) do
50         if tab["player_name"] ==  player_name then registered = true break end
51     end
52     if registered == nil then
53         local new={}
54         new["player_name"]=player_name
55         table.insert(stargate_network["registered_players"],new)
56         stargate.save_data("registered_players")
57         stargate.save_data(player_name)
58     end
59     stargate_network["players"][player_name]={}
60     stargate_network["players"][player_name]["formspec"]=""
61     stargate_network["players"][player_name]["current_page"]=stargate.default_page
62     stargate_network["players"][player_name]["own_gates"]={}
63     stargate_network["players"][player_name]["own_gates_count"]=0
64     stargate_network["players"][player_name]["public_gates"]={}
65     stargate_network["players"][player_name]["public_gates_count"]=0
66     stargate_network["players"][player_name]["current_index"]=0
773382 67 end)
R 68
69 stargate.registerGate = function(player_name,pos)
70     if stargate_network[player_name]==nil then
71         stargate_network[player_name]={}
72     end
73     local new_gate ={}
74     new_gate["pos"]=pos
75     new_gate["type"]="private"
76     new_gate["description"]=""
77     table.insert(stargate_network[player_name],new_gate)
d01564 78     if stargate.save_data(player_name)==nil then
773382 79         print ("[stargate] Couldnt update network file!")
R 80     end
81 end
82
83 stargate.unregisterGate = function(player_name,pos)
84     for __,gates in ipairs(stargate_network[player_name]) do
85         if gates["pos"].x==pos.x and gates["pos"].y==pos.y and gates["pos"].z==pos.z then
86             table.remove(stargate_network[player_name], __)
87             break
88         end
89     end
d01564 90     if stargate.save_data(player_name)==nil then
773382 91         print ("[stargate] Couldnt update network file!")
R 92     end
93 end
94
95 --show formspec to player
96 stargate.gateFormspecHandler = function(pos, node, clicker, itemstack)
97     local player_name = clicker:get_player_name()
98     local meta = minetest.env:get_meta(pos)
99     local owner=meta:get_string("owner")
100     if player_name~=owner then return end
101     local current_gate=nil
d01564 102     stargate_network["players"][player_name]["own_gates"]={}
R 103     stargate_network["players"][player_name]["public_gates"]={}
773382 104     local own_gates_count=0
R 105     for __,gates in ipairs(stargate_network[player_name]) do
106         if gates["pos"].x==pos.x and gates["pos"].y==pos.y and gates["pos"].z==pos.z then
107             current_gate=gates
108         else
109         own_gates_count=own_gates_count+1
d01564 110         table.insert(stargate_network["players"][player_name]["own_gates"],gates)
773382 111         end
R 112     end
d01564 113     stargate_network["players"][player_name]["own_gates_count"]=own_gates_count
773382 114     if current_gate==nil then 
R 115         print ("Gate not registered in network! Please remove it and place once again.")
116         return nil
117     end
d01564 118     stargate_network["players"][player_name]["current_index"]=0
R 119     stargate_network["players"][player_name]["current_gate"]=current_gate
120     stargate_network["players"][player_name]["dest_type"]="own"
773382 121     local formspec=stargate.get_formspec(player_name,"main")
d01564 122     stargate_network["players"][player_name]["formspec"]=formspec
R 123     print(dump(formspec))
124     if formspec ~=nil then minetest.show_formspec(player_name, "stargate_main", formspec) end
773382 125 end
R 126
127 -- get_formspec
128 stargate.get_formspec = function(player_name,page)
d01564 129     if player_name==nil then return nil end
R 130     stargate_network["players"][player_name]["current_page"]=page
131     local current_gate=stargate_network["players"][player_name]["current_gate"]
773382 132     local formspec = "size[14,10]"
R 133     --background
134     formspec = formspec .."background[-0.19,-0.2,;14.38,10.55;ui_form_bg.png]"
135     formspec = formspec.."label[0,0.0;Stargate]"
136     formspec = formspec.."label[0,.5;Position: ("..current_gate["pos"].x..","..current_gate["pos"].y..","..current_gate["pos"].z..")]"
137     formspec = formspec.."image_button[3.5,.6;.6,.6;toggle_icon.png;toggle_type;]"
138     formspec = formspec.."label[4,.5;Type: "..current_gate["type"].."]"
139     formspec = formspec.."image_button[6.5,.6;.6,.6;pencil_icon.png;edit_desc;]"
140     formspec = formspec.."label[0,1.1;Destination: ]"
141     formspec = formspec.."label[0,1.7;Aviable destinations:]"
142     formspec = formspec.."image_button[3.5,1.8;.6,.6;toggle_icon.png;toggle_dest_type;]"
d01564 143     formspec = formspec.."label[4,1.7;Filter: "..stargate_network["players"][player_name]["dest_type"].."]"
773382 144
R 145     if page=="main" then
146     formspec = formspec.."image_button[6.5,.6;.6,.6;pencil_icon.png;edit_desc;]"
147     formspec = formspec.."label[7,.5;Description: "..current_gate["description"].."]"
148     end
149     if page=="edit_desc" then
150     formspec = formspec.."image_button[6.5,.6;.6,.6;ok_icon.png;save_desc;]"
151     formspec = formspec.."field[7.3,.7;5,1;desc_box;Edit gate description:;"..current_gate["description"].."]"
152     end
153     
d01564 154     local list_index=stargate_network["players"][player_name]["current_index"]
773382 155     local page=math.floor(list_index / (30) + 1)
d01564 156     local pagemax = math.floor((stargate_network["players"][player_name]["own_gates_count"]+1) / (30) + 1)
R 157     for y=0,7,1 do
773382 158     for x=0,2,1 do
d01564 159         local gate_temp=stargate_network["players"][player_name]["own_gates"][list_index+1]
773382 160         if gate_temp then
d01564 161             formspec = formspec.."image_button["..(x*4.5)..","..(2.5+y*.9)..";.6,.6;stargate_icon.png;list_button"..list_index..";]"
R 162             formspec = formspec.."label["..(x*4.5+.5)..","..(2.3+y*.9)..";("..gate_temp["pos"].x..","..gate_temp["pos"].y..","..gate_temp["pos"].z..") "..gate_temp["type"].."]"
163             formspec = formspec.."label["..(x*4.5+.5)..","..(2.7+y*.9)..";"..gate_temp["description"].."]"
773382 164         end
R 165         list_index=list_index+1
166     end
d01564 167     end
R 168     formspec = formspec.."image_button[6.5,1.8;.6,.6;left_icon.png;page_left;]"
169     formspec = formspec.."image_button[6.9,1.8;.6,.6;right_icon.png;page_right;]"
170     formspec=formspec.."label[7.5,1.7;Page: "..page.." of "..pagemax.."]"
773382 171     return formspec
R 172 end
173
174 -- register_on_player_receive_fields
175 minetest.register_on_player_receive_fields(function(player, formname, fields)
d01564 176     print(dump(formname))
R 177     --if formname ~= "stargate:main" then return end
773382 178     local player_name = player:get_player_name()
d01564 179     local current_gate=stargate_network["players"][player_name]["current_gate"]
773382 180     local formspec
R 181
182     if fields.toggle_type then
183         if current_gate["type"] == "private" then 
d01564 184             current_gate["type"] = "public"
R 185         else current_gate["type"] = "private" end
773382 186         formspec= stargate.get_formspec(player_name,"main")
d01564 187         stargate_network["players"][player_name]["formspec"] = formspec
773382 188         minetest.show_formspec(player_name, "stargate:main", formspec)
R 189         minetest.sound_play("click", {to_player=player_name, gain = 0.5})
190         return
191     end
192     if fields.toggle_dest_type then
d01564 193         if stargate_network["players"][player_name]["dest_type"] == "all own" then 
R 194             stargate_network["players"][player_name]["dest_type"] = "all public"
195         else stargate_network["players"][player_name]["dest_type"] = "all own" end
196         stargate_network["players"][player_name]["current_index"] = 0
197         formspec = stargate.get_formspec(player_name,"main")
198         stargate_network["players"][player_name]["formspec"] = formspec
773382 199         minetest.show_formspec(player_name, "stargate:main", formspec)
R 200         minetest.sound_play("click", {to_player=player_name, gain = 0.5})
201         return
202     end
203     if fields.edit_desc then
204         formspec= stargate.get_formspec(player_name,"edit_desc")
d01564 205         stargate_network["players"][player_name]["formspec"]=formspec
773382 206         minetest.show_formspec(player_name, "stargate:main", formspec)
R 207         minetest.sound_play("click", {to_player=player_name, gain = 0.5})
208         return
209     end
210
211     if fields.save_desc then
212         current_gate["description"]=fields.desc_box
213         formspec= stargate.get_formspec(player_name,"main")
d01564 214         stargate_network["players"][player_name]["formspec"]=formspec
773382 215         minetest.show_formspec(player_name, "stargate:main", formspec)
R 216         minetest.sound_play("click", {to_player=player_name, gain = 0.5})
217         return
218     end
d01564 219     
R 220     -- page controls
221     local start=math.floor(stargate_network["players"][player_name]["current_index"]/30 +1 )
222     local start_i=start
223     local pagemax = math.floor((stargate_network["players"][player_name]["own_gates_count"]) / (30) + 1)
224     
225     if fields.page_left then
226         minetest.sound_play("paperflip2", {to_player=player_name, gain = 1.0})
227         start_i = start_i - 1
228         if start_i < 1 then    start_i = 1    end
229         if not (start_i    == start) then
230             stargate_network["players"][player_name]["current_index"] = (start_i-1)*30+1
231             formspec = stargate.get_formspec(player_name,"main")
232             stargate_network["players"][player_name]["formspec"] = formspec
233             minetest.show_formspec(player_name, "stargate:main", formspec)
234         end
235     end
236     if fields.page_right then
237         minetest.sound_play("paperflip2", {to_player=player_name, gain = 1.0})
238         start_i = start_i + 1 
239         if start_i > pagemax then start_i =  pagemax end
240         if not (start_i    == start) then
241             stargate_network["players"][player_name]["current_index"] = (start_i-1)*30+1
242             formspec = stargate.get_formspec(player_name,"main")
243             stargate_network["players"][player_name]["formspec"] = formspec
244             minetest.show_formspec(player_name, "stargate:main", formspec)
245         end
246     end
773382 247 end)