Compare commits

...

5 Commits

Author SHA1 Message Date
AiTechEye 6d65655436
Add files via upload 2021-01-02 12:56:58 +01:00
AiTechEye 399d040e0c
Add files via upload 2020-10-18 18:33:26 +02:00
AiTechEye 1818105580
Add files via upload 2020-08-01 08:38:44 +02:00
AiTechEye f48a866d49
Add files via upload 2020-07-30 09:35:13 +02:00
AiTechEye 3b2ec4e9bb
Add files via upload 2020-04-09 19:15:18 +02:00
6 changed files with 288 additions and 1 deletions

View File

@ -130,7 +130,7 @@ on_activate=function(self, staticdata)
on_rightclick=function(self, clicker)
if clicker:get_player_name()==self.user:get_player_name() then
local item=self.user:get_wielded_item():get_name()
if item=="vexcazer:mod" or item=="vexcazer:admin" then
if item=="vexcazer:mod" or item=="vexcazer:admin" or item=="vexcazer:world" then
local dir=self.user:get_look_dir()
self.dir=dir
if self.target:get_luaentity() and self.target:get_luaentity().itemstring then

285
vexcazer_schematic/init.lua Normal file
View File

@ -0,0 +1,285 @@
vexcazer_schematic = {user={}}
minetest.register_on_leaveplayer(function(player)
vexcazer_schematic.user[player:get_player_name()] = nil
end)
vexcazer_schematic.a=function(itemstack, user, pointed_thing,input,typ)
if not vexcazer_schematic.user[input.user_name] then
vexcazer_schematic.user[input.user_name] = {}
end
local u = vexcazer_schematic.user[input.user_name]
local pos
local jump = user:get_player_control().jump
if not jump then
if typ == "change" then
pos = pointed_thing.under
u.p = u.p == 1 and 2 or 1
return itemstack
elseif typ == "node" then
u.p = u.p or 1
pos = pointed_thing.under
u["pos"..u.p] = pos
else
u.p = u.p or 1
local up = user:get_pos()
up.y = up.y +0.5
pos = vector.round(up)
u["pos"..u.p] = pos
end
local o = minetest.add_entity(pos, "vexcazer_schematic:pos")
o:get_luaentity().user = input.user_name
o:get_luaentity().num = u.p
if u.p == 1 then
u.ob1 = math.random(1,9999)
else
u.ob2 = math.random(1,9999)
end
if u.pos1 and u.pos2 then
local x = math.abs(u.pos1.x-u.pos2.x) + 1
local y = math.abs(u.pos1.y-u.pos2.y) + 1
local z = math.abs(u.pos1.z-u.pos2.z) + 1
local m = minetest.add_entity({x=u.pos1.x+(u.pos2.x-u.pos1.x)/2,y=u.pos1.y+(u.pos2.y-u.pos1.y)/2,z=u.pos1.z+(u.pos2.z-u.pos1.z)/2}, "vexcazer_schematic:mark")
m:set_properties({visual_size = {x=x, y=y, z=z}})
m:get_luaentity().user = input.user_name
m:get_luaentity().num1 = u.ob1
m:get_luaentity().num2 = u.ob2
minetest.chat_send_player(input.user_name,"Size: "..x.." "..y.." "..z)
end
elseif jump and u.pos1 and u.pos2 then
vexcazer_schematic.b(user)
end
end
vexcazer_schematic.b=function(user,text,replace,saved)
text = text or vexcazer_schematic.user[user:get_player_name()].name or ""
local gui="" ..
"size[4.5,2]" ..
"background[0,0;4.5,2;vexcazer_background.png]"..
"field[0.2,0.2;4.7,1;text;;" .. text .."]" ..
"button_exit[0,1;1.5,1;exit;Quit]" ..
"button[1.5,1;1.5,1;save;Save]" ..
(replace and "button[3,1;1.5,1;replace;Replace]" or "") ..
"label[0,0.6;"..(saved or "").."]"
minetest.after(0.1, function(user,gui)
return minetest.show_formspec(user:get_player_name(), "vexcazer_schematic",gui)
end, user, gui)
end
vexcazer_schematic.place=function(user,text,msg)
local n = user:get_player_name()
vexcazer_schematic.user[n] = vexcazer_schematic.user[n] or {path="",pname=""}
local u = vexcazer_schematic.user[n]
text = text or n.placetext or ""
local gui="" ..
"size[4.5,2]" ..
"background[0,0;4.5,2;vexcazer_background.png]"..
"field[0.2,0.2;4.7,1;text;;" .. (u.pname or text or "") .."]" ..
"button_exit[0,1;1.5,1;go;Update]" ..
"checkbox[2,1;world;;"..(u.world or "false").."]" ..
"checkbox[1.7,1;addsch;;"..(u.sch or "true").."]" ..
"field[2.9,1.3;2,1;mod;;" .. (u.mod or "") .."]" ..
"tooltip[world;World path]" ..
"tooltip[mod;Mod path]" ..
"tooltip[addsch;Add ''/schematics'']" ..
"label[0,0.6;"..(msg or "").."]" ..
(u.path and "tooltip[text;"..u.path.."]" or "tooltip[text;Path and filename (folder/fodler2/filename)]")
minetest.after(0.1, function(user,gui)
return minetest.show_formspec(user:get_player_name(), "vexcazer_schematic_place",gui)
end, user, gui)
end
minetest.register_on_player_receive_fields(function(player, form, pressed)
if form=="vexcazer_schematic" then
local n = player:get_player_name()
if pressed.exit then
vexcazer_schematic.user[n] = nil
end
local u = vexcazer_schematic.user[n]
if not u or not pressed.text or pressed.text == "" or pressed.quit and not (pressed.replace or pressed.save) then
return
end
if string.find(pressed.text," ") then
vexcazer_schematic.b(player,string.gsub(pressed.text," ",""),true)
return
end
vexcazer_schematic.user[n].name = pressed.text
local f = minetest.get_worldpath().."/schematics/"..pressed.text..".mts"
if pressed.save then
local o=io.open(f, "r")
if o then
o:close()
vexcazer_schematic.b(player,pressed.text,true)
return
end
end
minetest.mkdir(minetest.get_worldpath().."/schematics")
minetest.create_schematic(u.pos1,u.pos2,nil,f)
vexcazer_schematic.b(player,pressed.text,nil,".../schematics/"..pressed.text..".mts")
elseif form=="vexcazer_schematic_place" then
local n = player:get_player_name()
local u = vexcazer_schematic.user[n]
if not u or not pressed.text then
return
end
vexcazer_schematic.user[n].sch = pressed.addsch ~= nil and pressed.addsch or vexcazer_schematic.user[n].sch or "true"
local adds = vexcazer_schematic.user[n].sch == "true" and "/schematics" or ""
if pressed.world then
vexcazer_schematic.user[n].world = pressed.world
u.path = minetest.get_worldpath()..adds.."/"..pressed.text..".mts"
u.mod = nil
u.pname = pressed.text
vexcazer_schematic.place(player,pressed.text)
elseif pressed.mod and pressed.mod ~= "" then
local m = minetest.get_modpath(pressed.mod)
u.world = nil
u.pname = pressed.text
if m then
u.path = m .. adds.."/" .. pressed.text .. ".mts"
end
local m2 = m and "" or (pressed.mod.." not found")
vexcazer_schematic.user[n].mod = pressed.mod
vexcazer_schematic.place(player,pressed.text,m2)
end
if u.world and u.path ~= nil then
local o=io.open(u.path, "r")
if o then
o:close()
else
vexcazer_schematic.place(player,nil,"schematic not found")
end
else
vexcazer_schematic.place(player,nil,"(can't check files outside world folder, just try to place)")
end
end
end)
vexcazer.registry_mode({
wear_on_use=1,
wear_on_place=1,
name="Create schematic",
info="USE to set pos\nPLACE to change pos1/pos2\nUSE somewhere else to switch pos in air\nUSE and JUMP to create schematic",
disallow_damage_on_use=true,
hide_mode_default=true,
hide_mode_mod=true,
on_place=function(itemstack, user, pointed_thing,input)
if not input.world then
minetest.chat_send_player(input.user_name,"<vexcazer> schematic only able with admin world for safety")
else
vexcazer_schematic.a(itemstack, user, pointed_thing,input,"change")
end
end,
on_use=function(itemstack, user, pointed_thing,input)
if not input.world then
minetest.chat_send_player(input.user_name,"<vexcazer> schematic only able with admin world for safety")
elseif pointed_thing.type == "node" then
vexcazer_schematic.a(itemstack, user, pointed_thing,input,"node")
else
vexcazer_schematic.a(itemstack, user, pointed_thing,input,"air")
end
end
})
vexcazer.registry_mode({
wear_on_use=1,
wear_on_place=1,
name="Place schematic",
info="USE to on a node to place above\nPLACE to place under\nUSE somewhere else to place on your position\nUSE and JUMP to open the form",
disallow_damage_on_use=true,
hide_mode_default=true,
hide_mode_mod=true,
on_place=function(itemstack, user, pointed_thing,input)
local n = user:get_player_name()
local u = vexcazer_schematic.user[n]
if not input.world then
minetest.chat_send_player(input.user_name,"<vexcazer> schematic only able with admin world for safety")
elseif not u or not u.path or u.path == "" then
vexcazer_schematic.place(user)
else
minetest.place_schematic(pointed_thing.above, u.path,"random",nil,false,"place_center_x,place_center_z")
end
end,
on_use=function(itemstack, user, pointed_thing,input)
local n = user:get_player_name()
local u = vexcazer_schematic.user[n]
if not input.world then
minetest.chat_send_player(input.user_name,"<vexcazer> schematic only able with admin world for safety")
elseif not u or not u.path or u.path == "" or user:get_player_control().jump then
vexcazer_schematic.place(user)
else
if pointed_thing.type == "node" then
minetest.place_schematic(pointed_thing.under, u.path,"random",nil,false,"place_center_x,place_center_z")
else
minetest.place_schematic(vector.round(user:get_pos()), u.path,"random",nil,false,"place_center_x,place_center_z")
end
end
end
})
minetest.register_entity("vexcazer_schematic:pos",{
hp_max = 1,
physical = false,
pointable = false,
collisionbox = {-0.52,-0.52,-0.52, 0.52,0.52,0.52},
visual_size = {x=1.05, y=1.05},
visual = "cube",
textures = {"vexcazer_schematic_pos1.png","vexcazer_schematic_pos1.png","vexcazer_schematic_pos1.png","vexcazer_schematic_pos1.png","vexcazer_schematic_pos1.png","vexcazer_schematic_pos1.png"},
is_visible = true,
t2 = {"vexcazer_schematic_pos2.png","vexcazer_schematic_pos2.png","vexcazer_schematic_pos2.png","vexcazer_schematic_pos2.png","vexcazer_schematic_pos2.png","vexcazer_schematic_pos2.png"},
on_step = function(self, dtime)
self.timer = self.timer + dtime
if self.timer > 0.1 and self.user then
self.timer = 0
local u = vexcazer_schematic.user[self.user]
if not u then
self.user = nil
return
elseif self.num == 2 and not self.rndn then
self.object:set_properties({textures = self.t2})
end
self.rndn = self.rndn or u["ob"..self.num]
if u["ob"..self.num] ~= self.rndn then
self.user = nil
end
elseif not self.user then
self.object:remove()
return self
end
end,
timer=0.09
})
minetest.register_entity("vexcazer_schematic:mark",{
hp_max = 1,
physical = false,
pointable = false,
collisionbox = {-0.52,-0.52,-0.52, 0.52,0.52,0.52},
visual_size = {x=1.05, y=1.05},
visual = "cube",
textures = {"vexcazer_schematic_mark.png","vexcazer_schematic_mark.png","vexcazer_schematic_mark.png","vexcazer_schematic_mark.png","vexcazer_schematic_mark.png","vexcazer_schematic_mark.png","vexcazer_schematic_mark.png"},
is_visible = true,
on_step = function(self, dtime)
self.timer = self.timer + dtime
if self.timer > 0.1 and self.user then
self.timer = 0
local u = vexcazer_schematic.user[self.user]
if not u or self.num1 ~= u.ob1 or self.num2 ~= u.ob2 then
self.user = nil
end
elseif not self.user then
self.object:remove()
return self
end
end,
timer=0.09
})

View File

@ -0,0 +1,2 @@
name = vexcazer_schematic
depends = vexcazer

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 230 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 237 B