123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- --pcnaming.lua
- --a.k.a Passive component naming
- --Allows to assign names to passive components, so they can be called like:
- --setstate("iamasignal", "green")
- atlatc.pcnaming={name_map={}}
- function atlatc.pcnaming.load(stuff)
- if type(stuff)=="table" then
- atlatc.pcnaming.name_map=stuff
- end
- end
- function atlatc.pcnaming.save()
- return atlatc.pcnaming.name_map
- end
- function atlatc.pcnaming.resolve_pos(pos, func_name)
- if type(pos)=="string" then
- local e = atlatc.pcnaming.name_map[pos]
- if e then return e end
- elseif type(pos)=="table" and pos.x and pos.y and pos.z then
- return pos
- end
- error("Invalid position supplied to " .. (func_name or "???")..": " .. dump(pos))
- end
- local pcrename = {}
- minetest.register_craftitem("advtrains_luaautomation:pcnaming",{
- description = attrans("Passive Component Naming Tool\n\nRight-click to name a passive component."),
- groups = {cracky=1}, -- key=name, value=rating; rating=1..3.
- inventory_image = "atlatc_pcnaming.png",
- wield_image = "atlatc_pcnaming.png",
- stack_max = 1,
- on_place = function(itemstack, placer, pointed_thing)
- local pname = placer:get_player_name()
- if not pname then
- return
- end
- if not minetest.check_player_privs(pname, {atlatc=true}) then
- minetest.chat_send_player(pname, "Missing privilege: atlatc")
- return
- end
- if pointed_thing.type=="node" then
- local pos=pointed_thing.under
- if advtrains.is_protected(pos, pname) then
- minetest.record_protection_violation(pos, pname)
- return
- end
- local node = advtrains.ndb.get_node(pos)
- local ndef = minetest.registered_nodes[node.name]
- if node.name and (
- minetest.get_item_group(node.name, "advtrains_signal")>0 --is IL signal
- or advtrains.is_passive(pos) -- is passive component
- or (ndef and ndef.luaautomation) -- is active component
- ) then
- --look if this one already has a name
- local pn=""
- for name, npos in pairs(atlatc.pcnaming.name_map) do
- if vector.equals(npos, pos) then
- pn=name
- end
- end
- pcrename[pname] = pos
- minetest.show_formspec(pname, "atlatc_naming", "field[pn;Set name of component (empty to clear);"..minetest.formspec_escape(pn).."]")
- end
- end
- end,
- })
- minetest.register_on_player_receive_fields(function(player, formname, fields)
- if formname == "atlatc_naming" then
- local pname = player:get_player_name()
- local pos=pcrename[pname]
- if fields.pn and pos then
- --first remove all occurences
- for name, npos in pairs(atlatc.pcnaming.name_map) do
- if vector.equals(npos, pos) then
- atlatc.pcnaming.name_map[name]=nil
- end
- end
- if fields.pn~="" then
- atlatc.pcnaming.name_map[fields.pn]=pos
- end
- end
- end
- end)
|