diff options
author | Gabriel Pérez-Cerezo <gabriel@gpcf.eu> | 2016-08-15 18:29:48 -0700 |
---|---|---|
committer | Gabriel Pérez-Cerezo <gabriel@gpcf.eu> | 2016-08-15 18:29:48 -0700 |
commit | 6a184f2d669aed9101ee9f1fc13d2cb02a5fa94c (patch) | |
tree | b0934ccf420622c66ded64d66df156bb1316a657 | |
parent | 52d1b90b8906b28d4b5ba93cd271b3865b316d00 (diff) |
Added pricing, also added stuff to sell areas, that functionality is coming soon
-rw-r--r-- | depends.txt | 2 | ||||
-rw-r--r-- | init.lua | 97 |
2 files changed, 93 insertions, 6 deletions
diff --git a/depends.txt b/depends.txt index a18cd91..36f5af0 100644 --- a/depends.txt +++ b/depends.txt @@ -1 +1,3 @@ areas +default +atm @@ -1,9 +1,30 @@ +local S +if minetest.get_modpath("intllib") then + S = intllib.Getter() +else + S = function(s, a, ...) + if a == nil then + return s + end + a = {a, ...} + return s:gsub("(@?)@(%(?)(%d+)(%)?)", + function(e, o, n, c) + if e == ""then + return a[tonumber(n)] .. (o == "" and c or "") + else + return "@" .. o .. n .. c + end + end) + end +end + -- markers are useful for measuring distances and for marking areas -- markers are protected from digging by other players for one day -- (the protection for the *marker* auto-expires then, and it can be digged) markers = {} +markers.intllib = S dofile(minetest.get_modpath("markers").."/config.lua"); dofile(minetest.get_modpath("markers").."/areas.lua"); @@ -48,14 +69,14 @@ end -- You can return somethiing like "for free" or "the promise to build anything good" as well as any -- real prices in credits or materials - it's really just a text here. -- Make sure you do not charge the player more than what you ask here. -markers.calculate_area_price_text = function( pos1, pos2, playername ) +markers.calculate_area_price = function( pos1, pos2, playername ) - local price = ( math.abs( pos1.x - pos2.x )+1 ) - * ( math.abs( pos1.z - pos2.z )+1 ); + local price = math.ceil(( math.abs( pos1.x - pos2.x )+1 ) + * ( math.abs( pos1.z - pos2.z )+1 ) * (0.27* 1/(0.1+0.01*math.sqrt(pos1.x*pos2.x +pos1.z*pos2.z)))); -- * math.ceil( ( math.abs( pos1.y - pos2.y )+1 )/10); - return tostring( price )..' credits'; + return price; end @@ -314,8 +335,8 @@ markers.get_marker_formspec = function(player, pos, error_msg) "button_exit[2,6.0;2,0.5;abort;OK]"; else formspec = formspec.. --- 'label[0.5,2.0;Buying this area will cost you ]'.. --- 'label[4.7,2.0;'..markers.calculate_area_price_text( coords[1], coords[2], name )..'.]'.. + 'label[0.5,2.0;Buying this area will cost you ]'.. + 'label[4.7,2.0;'.. '$ ' ..tostring(markers.calculate_area_price( coords[1], coords[2], name ))..'.]'.. 'label[0.5,3.0;Your area ought to go..]'.. 'label[0.5,3.5;this many blocks up:]'.. @@ -410,6 +431,17 @@ markers.marker_on_receive_fields = function(pos, formname, fields, sender) -- those coords lack the height component local pos1 = coords[1]; local pos2 = coords[2]; + local price = markers.calculate_area_price(pos1,pos2,"") + if not atm.balance[name] then + atm.balance[name] = 0 + end + if atm.balance[name] < price then + minetest.chat_send_player(name, "You can't protect that area: Not enough money") + return + end + atm.readaccounts() + atm.balance[name] = atm.balance[name] - price + atm.saveaccounts() -- apply height values from the formspeck pos1.y = pos1.y - add_depth; pos2.y = pos2.y + add_height; @@ -429,6 +461,7 @@ markers.marker_on_receive_fields = function(pos, formname, fields, sender) return end + local id = areas:add(name, fields['set_area_name'], pos1, pos2, nil) areas:save() @@ -526,6 +559,58 @@ minetest.register_node("markers:mark", { end, }) +markers.generate_buy_formspec = function(meta, player) + local price = minetest.deserialize(meta:get_string("price")) or 15 + if not atm.balance[player] then + atm.balance[player] = 0 + atm.saveaccounts() + end + local formspec = "size[8,7]" + .. default.gui_bg + .. default.gui_bg_img + .. default.gui_slots + .. "label[2.5,0;" .. S("-- Sell area --") .. "]" + .. "label[2.5,1;" .. S("Price: $") .. price .. "]" .. + "label[2.5,2;" .. S("Your account balance: $") .. atm.balance[player] .. "]" .. + "button_exit[1.5,6.2;3,0.5;cancel;" .. S("Cancel") .. "]" .. "button_exit[4.6,6.2;3,0.5;ok;Buy]" + return formspec +end + +minetest.register_node("markers:protect_sell", { + description = S("Protection Block For Sale"), + drawtype = "nodebox", + tiles = { + "forsale.png", + "forsale.png", + "forsale.png^protector_logo.png" + }, + sounds = default.node_sound_stone_defaults(), + groups = {dig_immediate = 2, unbreakable = 1}, + is_ground_content = false, + paramtype = "light", + light_source = 4, + node_box = { + type = "fixed", + fixed = { + {-0.5 ,-0.5, -0.5, 0.5, 0.5, 0.5}, + } + }, + on_rightclick = function(pos, node, clicker, itemstack) + + local meta = minetest.get_meta(pos) + minetest.show_formspec(clicker:get_player_name(), + "protector_sell:node_" .. minetest.pos_to_string(pos), markers.generate_buy_formspec(meta, clicker:get_player_name())) + end, + + can_dig = function(pos, player) + + return protector.can_dig(1, pos, player:get_player_name(), true, 1) + end, + + on_blast = function() end, +}) + + minetest.register_craft({ output = "markers:mark 4", |