Add files via upload

master
AiTechEye 2022-07-05 11:21:03 +02:00 committed by GitHub
parent de7d739c1f
commit 8f13ac41e7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 169 additions and 0 deletions

View File

@ -1,5 +1,6 @@
places.citybuildings = {
{name="house1",chance=5,size=1},
{name="places_plot",chance=30,size=1},
{name="uncraft_sell_service",chance=30,size=1,freespace={{-1,0}}},
{name="places_shop",chance=20,size=1,freespace={{0,-1}}},
{name="places_burnserivce",chance=20,size=1,freespace={{-1,0}}},

View File

@ -7,6 +7,17 @@ minetest.register_craft({
},
})
minetest.register_craft({
output="places:selling",
recipe={
{"default:chest","materials:plastic_sheet","player_style:coin"},
{"materials:diode","materials:wood_table","default:iron_ingot"},
{"default:sign","group:wood","group:wood"},
},
})
minetest.register_craft({
output="places:rentpanel_copycard",
recipe={
@ -213,6 +224,163 @@ minetest.register_node("places:rental", {
end
})
minetest.register_node("places:selling", {
description = "Selling panel",
tiles={
"places_wood.png",
"places_wood.png",
"places_wood.png",
"places_wood.png",
"places_wood.png",
"places_rentalpanel.png^[invert:rgb",
},
paramtype2 = "facedir",
sounds = default.node_sound_wood_defaults(),
groups = {choppy=3,oddly_breakable_by_hand=3,store=100},
drawtype="nodebox",
node_box = {
type = "fixed",
fixed = {
{-0.4, -0.4, 0.5, 0.4, 0.4, 0.45},
}
},
after_place_node=function(pos, placer, itemstack, pointed_thing)
minetest.get_meta(pos):set_string("owner",placer:get_player_name())
end,
on_construct=function(pos)
local m = minetest.get_meta(pos)
m:set_int("price",1000)
m:set_int("removearea",-1)
end,
panel=function(pos,user,preview,confirm)
local m = minetest.get_meta(pos)
local a = m:get_string("pos1") ~= ""
local p1 = a and vector.add(pos,minetest.string_to_pos(m:get_string("pos1"))) or ""
local p2 = a and vector.add(pos,minetest.string_to_pos(m:get_string("pos2"))) or ""
local name = user and user:is_player() and user:get_player_name() or ""
local form = "size[3,3.6]listcolors[#77777777;#777777aa;#000000ff]"
if confirm then
form = form
.."label[0,-0.3;Buy this area?\n\nPrice: "..m:get_int("price").."]"
.."button[-0.2,3;3.5,1;confirm;Confirm]"
elseif not preview and (name ~= "" and m:get_string("owner") == name) then
form = form
.."label[0,-0.3;"..(a and "Area is setup" or "No area is setup").."]"
.. "button[0,0;2.2,1;setup;Setup area]"
.."field[0,1;1.5,1;price;;"..m:get_int("price").."]tooltip[price;Price]"
.."field[1.5,1;1,1;removearea;;"..m:get_int("removearea").."]tooltip[removearea;Remove area (ID) during purchase]"
.."button[2,0.7;1,1;set;Set]"
.."button[-0.2,3.4;3.5,0.6;cp;Customer Preview]"
..(a and "label[0,2;Size: "..((p2.x-p1.x)+1).."x"..((p2.y-p1.y)+1).."x"..((p2.z-p1.z)+1).."]button_exit[0,2.5;3,0.6;pa;Preview area]" or "")
else
local renter = m:get_string("renter")
if m:get_string("pos1") == "" then
form = form .."label[0,-0.3;The panel is not setup]"
else
form = form
.. (m:get_string("owner") ~= "" and "label[0,0.5;By: "..m:get_string("owner").."]" or "")
..(user and "label[0,0;"..minetest.colorize("#FFFF00",Getcoin(user)).."]" or "")
.."button[0.5,3;2.2,1;buy;Buy]"
.."label[0,1.25;Price: "..m:get_int("price").."]"
..(a and "label[0,2;Size: "..((p2.x-p1.x)+1).."x"..((p2.y-p1.y)+1).."x"..((p2.z-p1.z)+1).."]button_exit[0,2.5;3,0.6;pa;Preview area]" or "")
end
end
m:set_string("formspec",form)
end,
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
minetest.registered_nodes["places:selling"].panel(pos, player)
end,
on_receive_fields=function(pos, formname, pressed, sender)
local m = minetest.get_meta(pos)
local name = sender and sender:get_player_name()
if pressed.buy then
minetest.registered_nodes["places:selling"].panel(pos, sender,true,true)
elseif pressed.confirm then
local c = Getcoin(sender)
local p = m:get_int("price")
if c < p then
minetest.chat_send_player(name,"You can't afford "..p.." (cons: ".. c ..")")
minetest.registered_nodes["places:selling"].panel(pos, sender)
return
end
local p1 = vector.add(pos,minetest.string_to_pos(m:get_string("pos1")))
local p2 = vector.add(pos,minetest.string_to_pos(m:get_string("pos2")))
local id = protect.add_game_rule_area(p1,p2,"City",name,false)
Coin(sender,-p)
Coin(m:get_string("owner"),p+minetest.get_item_group("places:selling","store"))
local id = m:get_int("removearea")
if id ~= -1 then
protect.remove_game_rule_area(id)
end
minetest.remove_node(pos)
elseif pressed.cp then
minetest.registered_nodes["places:selling"].panel(pos, sender,true)
elseif pressed.pa then
local p = protect.user[name]
p.user = name
p.markid = math.random(0,9999)
p.pos1 = vector.add(pos,minetest.string_to_pos(m:get_string("pos1")))
p.pos2 = vector.add(pos,minetest.string_to_pos(m:get_string("pos2")))
local self = minetest.add_entity(pos, "protect:mark"):get_luaentity()
self.user = name
self.markid = p.markid
local markid = self.markid
minetest.after(10,function(name,markid)
local p = protect.user[name]
if p.markid == markid then
protect.clear(name)
end
end,name,markid)
elseif pressed.set then
local n = tonumber(pressed.removearea)
if n ~= -1 then
local f = true
local pb = minetest.get_player_privs(name).protection_bypass == true
for i,v in pairs(protect.areas) do
if v.id == n then
if v.game_rule then
minetest.chat_send_player(name,"You can't remove a game rule area")
f = false
elseif v.owner == name or pb then
m:set_int("removearea",pressed.removearea)
minetest.chat_send_player(name,"Area set")
f = false
else
minetest.chat_send_player(name,"That area doesn't belongs to you")
f = false
end
break
end
end
if f then
minetest.chat_send_player(name,"Area do not exist")
end
else
m:set_int("removearea",-1)
end
m:set_int("price",pressed.price or m:get_int("price"))
minetest.registered_nodes["places:selling"].panel(pos, sender)
elseif pressed.setup then
local p = protect.user[name]
if not (p and p.pos1 and p.pos2) then
minetest.chat_send_player(name,'Mark with "/protect 1 /protect 2" to select the area to sell\nYou do not need to protect, just mark it\nThen Press the setup button again')
else
local pr,o = protect.test(p.pos1,p.pos2,name)
if pr == false then
minetest.chat_send_player(name,"The area is protected by "..o)
else
m:set_string("pos1",minetest.pos_to_string(vector.subtract(p.pos1,pos)))
m:set_string("pos2",minetest.pos_to_string(vector.subtract(p.pos2,pos)))
protect.clear(name)
minetest.chat_send_player(name,"The area is confirmed")
minetest.registered_nodes["places:selling"].on_receive_fields(pos, formname, {cancel=true}, sender)
minetest.registered_nodes["places:selling"].panel(pos, sender)
end
end
end
end,
})
minetest.register_tool("places:rentpanel_copycard", {
description = "Copy and past settings to renting panels",
inventory_image = "rentpanel_copycard.png",