mirror of
https://github.com/minetest-mods/mesecons.git
synced 2024-12-25 18:00:19 +01:00
New branch: Move mesecon to node definition instead of functions like register_conductor; first steps: move everything to legacy
This commit is contained in:
parent
12206ac190
commit
e0aa5b1d3d
@ -3,7 +3,7 @@
|
|||||||
-- | \/ | |___ ____ |___ | | | | \ | |____
|
-- | \/ | |___ ____ |___ | | | | \ | |____
|
||||||
-- | | | | | | | | | \ | |
|
-- | | | | | | | | | \ | |
|
||||||
-- | | |___ ____| |___ |____ |____| | \| ____|
|
-- | | |___ ____| |___ |____ |____| | \| ____|
|
||||||
-- by Jeija and Minerd247
|
-- by Jeija, Uberi (Temperest), sfan5, VanessaE,
|
||||||
--
|
--
|
||||||
--
|
--
|
||||||
--
|
--
|
||||||
@ -21,110 +21,29 @@ mesecon.actions_off={} -- Saves registered function callbacks for mesecon off
|
|||||||
mesecon.actions_change={} -- Saves registered function callbacks for mesecon change
|
mesecon.actions_change={} -- Saves registered function callbacks for mesecon change
|
||||||
mesecon.receptors={}
|
mesecon.receptors={}
|
||||||
mesecon.effectors={}
|
mesecon.effectors={}
|
||||||
mesecon.rules={}
|
|
||||||
mesecon.conductors={}
|
mesecon.conductors={}
|
||||||
|
|
||||||
-- INCLUDE SETTINGS
|
-- INCLUDE SETTINGS
|
||||||
dofile(minetest.get_modpath("mesecons").."/settings.lua")
|
dofile(minetest.get_modpath("mesecons").."/settings.lua")
|
||||||
|
|
||||||
|
--Presets (eg default rules)
|
||||||
|
dofile(minetest.get_modpath("mesecons").."/presets.lua");
|
||||||
|
|
||||||
--Internal API
|
--Internal API
|
||||||
dofile(minetest.get_modpath("mesecons").."/internal.lua");
|
dofile(minetest.get_modpath("mesecons").."/internal.lua");
|
||||||
|
|
||||||
|
--Deprecated stuff
|
||||||
|
dofile(minetest.get_modpath("mesecons").."/legacy.lua");
|
||||||
|
|
||||||
-- API API API API API API API API API API API API API API API API API API
|
-- API API API API API API API API API API API API API API API API API API
|
||||||
|
|
||||||
function mesecon:register_receptor(onstate, offstate, rules, get_rules)
|
|
||||||
if get_rules == nil and rules == nil then
|
|
||||||
rules = mesecon:get_rules("default")
|
|
||||||
end
|
|
||||||
table.insert(mesecon.receptors,
|
|
||||||
{onstate = onstate,
|
|
||||||
offstate = offstate,
|
|
||||||
rules = rules,
|
|
||||||
get_rules = get_rules})
|
|
||||||
end
|
|
||||||
|
|
||||||
function mesecon:register_effector(onstate, offstate, input_rules, get_input_rules)
|
|
||||||
if get_input_rules==nil and input_rules==nil then
|
|
||||||
rules=mesecon:get_rules("default")
|
|
||||||
end
|
|
||||||
table.insert(mesecon.effectors,
|
|
||||||
{onstate = onstate,
|
|
||||||
offstate = offstate,
|
|
||||||
input_rules = input_rules,
|
|
||||||
get_input_rules = get_input_rules})
|
|
||||||
end
|
|
||||||
|
|
||||||
function mesecon:receptor_on(pos, rules)
|
|
||||||
if rules == nil then
|
|
||||||
rules = mesecon:get_rules("default")
|
|
||||||
end
|
|
||||||
|
|
||||||
for i, rule in ipairs(rules) do
|
print("[OK] mesecons")
|
||||||
local np = {
|
|
||||||
x = pos.x + rule.x,
|
|
||||||
y = pos.y + rule.y,
|
|
||||||
z = pos.z + rule.z}
|
|
||||||
if mesecon:rules_link(pos, np, rules) then
|
|
||||||
mesecon:turnon(np, pos)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function mesecon:receptor_off(pos, rules)
|
|
||||||
if rules == nil then
|
|
||||||
rules = mesecon:get_rules("default")
|
|
||||||
end
|
|
||||||
|
|
||||||
for i, rule in ipairs(rules) do
|
|
||||||
local np = {
|
|
||||||
x = pos.x + rule.x,
|
|
||||||
y = pos.y + rule.y,
|
|
||||||
z = pos.z + rule.z}
|
|
||||||
if mesecon:rules_link(pos, np, rules) and not mesecon:connected_to_pw_src(np) then
|
|
||||||
mesecon:turnoff(np, pos)
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
|
|
||||||
function mesecon:register_on_signal_on(action)
|
|
||||||
table.insert(mesecon.actions_on, action)
|
|
||||||
end
|
|
||||||
|
|
||||||
function mesecon:register_on_signal_off(action)
|
|
||||||
table.insert(mesecon.actions_off, action)
|
|
||||||
end
|
|
||||||
|
|
||||||
function mesecon:register_on_signal_change(action)
|
|
||||||
table.insert(mesecon.actions_change, action)
|
|
||||||
end
|
|
||||||
|
|
||||||
function mesecon:register_conductor (onstate, offstate, rules, get_rules)
|
|
||||||
if rules == nil then
|
|
||||||
rules = mesecon:get_rules("default")
|
|
||||||
end
|
|
||||||
table.insert(mesecon.conductors, {onstate = onstate, offstate = offstate, rules = rules, get_rules = get_rules})
|
|
||||||
end
|
|
||||||
|
|
||||||
mesecon:add_rules("default",
|
|
||||||
{{x=0, y=0, z=-1},
|
|
||||||
{x=1, y=0, z=0},
|
|
||||||
{x=-1, y=0, z=0},
|
|
||||||
{x=0, y=0, z=1},
|
|
||||||
{x=1, y=1, z=0},
|
|
||||||
{x=1, y=-1, z=0},
|
|
||||||
{x=-1, y=1, z=0},
|
|
||||||
{x=-1, y=-1, z=0},
|
|
||||||
{x=0, y=1, z=1},
|
|
||||||
{x=0, y=-1, z=1},
|
|
||||||
{x=0, y=1, z=-1},
|
|
||||||
{x=0, y=-1, z=-1}})
|
|
||||||
|
|
||||||
print("[MESEcons] Main mod Loaded!")
|
|
||||||
|
|
||||||
--The actual wires
|
--The actual wires
|
||||||
dofile(minetest.get_modpath("mesecons").."/wires.lua");
|
dofile(minetest.get_modpath("mesecons").."/wires.lua");
|
||||||
|
|
||||||
--Services like turnoff receptor on dignode and so on
|
--Services like turnoff receptor on dignode and so on
|
||||||
dofile(minetest.get_modpath("mesecons").."/services.lua");
|
dofile(minetest.get_modpath("mesecons").."/services.lua");
|
||||||
--Deprecated stuff
|
|
||||||
dofile(minetest.get_modpath("mesecons").."/legacy.lua");
|
|
||||||
|
@ -2,6 +2,11 @@
|
|||||||
|
|
||||||
--Receptors
|
--Receptors
|
||||||
function mesecon:is_receptor_node(nodename)
|
function mesecon:is_receptor_node(nodename)
|
||||||
|
if minetest.registered_nodes[nodename].mesecons
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.receptor
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.receptor.state == mesecon.state.on then
|
||||||
|
return true
|
||||||
|
end
|
||||||
for _, receptor in ipairs(mesecon.receptors) do
|
for _, receptor in ipairs(mesecon.receptors) do
|
||||||
if receptor.onstate == nodename then
|
if receptor.onstate == nodename then
|
||||||
return true
|
return true
|
||||||
@ -11,6 +16,11 @@ function mesecon:is_receptor_node(nodename)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mesecon:is_receptor_node_off(nodename, pos, ownpos)
|
function mesecon:is_receptor_node_off(nodename, pos, ownpos)
|
||||||
|
if minetest.registered_nodes[nodename].mesecons
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.receptor
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.receptor.state == mesecon.state.off then
|
||||||
|
return true
|
||||||
|
end
|
||||||
for _, receptor in ipairs(mesecon.receptors) do
|
for _, receptor in ipairs(mesecon.receptors) do
|
||||||
if receptor.offstate == nodename then
|
if receptor.offstate == nodename then
|
||||||
return true
|
return true
|
||||||
@ -20,7 +30,16 @@ function mesecon:is_receptor_node_off(nodename, pos, ownpos)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mesecon:receptor_get_rules(node)
|
function mesecon:receptor_get_rules(node)
|
||||||
for i, receptor in ipairs(mesecon.receptors) do
|
if minetest.registered_nodes[node.name].mesecons
|
||||||
|
and minetest.registered_nodes[node.name].mesecons.receptor then
|
||||||
|
local rules = minetest.registered_nodes[node.name].mesecons.receptor.rules
|
||||||
|
if type(rules) == 'function' then
|
||||||
|
return rules(node)
|
||||||
|
else
|
||||||
|
return rules
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for i, receptor in ipairs(mesecon.receptors) do --TODO
|
||||||
if receptor.onstate == node.name or receptor.offstate == node.name then
|
if receptor.onstate == node.name or receptor.offstate == node.name then
|
||||||
if receptor.get_rules ~= nil then
|
if receptor.get_rules ~= nil then
|
||||||
return receptor.get_rules(node.param2)
|
return receptor.get_rules(node.param2)
|
||||||
@ -36,28 +55,51 @@ end
|
|||||||
|
|
||||||
-- Effectors
|
-- Effectors
|
||||||
function mesecon:is_effector_on(nodename)
|
function mesecon:is_effector_on(nodename)
|
||||||
for i, effector in ipairs(mesecon.effectors) do
|
for i, effector in ipairs(mesecon.effectors) do --TODO
|
||||||
if effector.onstate == nodename then
|
if effector.onstate == nodename then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if minetest.registered_nodes[nodename].mesecons
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.effector
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.effector.state == mesecon.state.on then
|
||||||
|
return true
|
||||||
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon:is_effector_off(nodename)
|
function mesecon:is_effector_off(nodename)
|
||||||
for i, effector in ipairs(mesecon.effectors) do
|
for i, effector in ipairs(mesecon.effectors) do --TODO
|
||||||
if effector.offstate == nodename then
|
if effector.offstate == nodename then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if minetest.registered_nodes[nodename].mesecons
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.effector
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.effector.state == mesecon.state.off then
|
||||||
|
return true
|
||||||
|
end
|
||||||
return false
|
return false
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon:is_effector(nodename)
|
function mesecon:is_effector(nodename)
|
||||||
return mesecon:is_effector_on(nodename) or mesecon:is_effector_off(nodename)
|
if minetest.registered_nodes[nodename].mesecons
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.effector then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
return mesecon:is_effector_on(nodename) or mesecon:is_effector_off(nodename) --TODO
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon:effector_get_input_rules(node)
|
function mesecon:effector_get_input_rules(node)
|
||||||
|
if minetest.registered_nodes[node.name].mesecons
|
||||||
|
and minetest.registered_nodes[node.name].mesecons.effector then
|
||||||
|
local rules = minetest.registered_nodes[node.name].mesecons.effector.rules
|
||||||
|
if type(rules) == 'function' then
|
||||||
|
return rules(node)
|
||||||
|
else
|
||||||
|
return rules
|
||||||
|
end
|
||||||
|
end
|
||||||
for i, effector in ipairs(mesecon.effectors) do
|
for i, effector in ipairs(mesecon.effectors) do
|
||||||
if effector.onstate == node.name
|
if effector.onstate == node.name
|
||||||
or effector.offstate == node.name then
|
or effector.offstate == node.name then
|
||||||
@ -74,21 +116,21 @@ end
|
|||||||
|
|
||||||
--Signals
|
--Signals
|
||||||
|
|
||||||
function mesecon:activate(pos)
|
function mesecon:activate(pos) --TODO
|
||||||
local node = minetest.env:get_node(pos)
|
local node = minetest.env:get_node(pos)
|
||||||
for i, action in ipairs(mesecon.actions_on) do
|
for i, action in ipairs(mesecon.actions_on) do
|
||||||
action(pos, node)
|
action(pos, node)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon:deactivate(pos)
|
function mesecon:deactivate(pos) --TODO
|
||||||
local node = minetest.env:get_node(pos)
|
local node = minetest.env:get_node(pos)
|
||||||
for i, action in ipairs(mesecon.actions_off) do
|
for i, action in ipairs(mesecon.actions_off) do
|
||||||
action(pos, node)
|
action(pos, node)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon:changesignal(pos)
|
function mesecon:changesignal(pos) --TODO
|
||||||
local node = minetest.env:get_node(pos)
|
local node = minetest.env:get_node(pos)
|
||||||
for i, action in ipairs(mesecon.actions_change) do
|
for i, action in ipairs(mesecon.actions_change) do
|
||||||
action(pos, node)
|
action(pos, node)
|
||||||
@ -112,7 +154,11 @@ end
|
|||||||
--Conductor system stuff
|
--Conductor system stuff
|
||||||
|
|
||||||
function mesecon:get_conductor_on(offstate)
|
function mesecon:get_conductor_on(offstate)
|
||||||
for i, conductor in ipairs(mesecon.conductors) do
|
if minetest.registered_nodes[nodename].mesecons
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.condcutor then
|
||||||
|
return minetest.registered_nodes[nodename].mesecons.conductor.onstate
|
||||||
|
end
|
||||||
|
for i, conductor in ipairs(mesecon.conductors) do --TODO
|
||||||
if conductor.offstate == offstate then
|
if conductor.offstate == offstate then
|
||||||
return conductor.onstate
|
return conductor.onstate
|
||||||
end
|
end
|
||||||
@ -121,7 +167,11 @@ function mesecon:get_conductor_on(offstate)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mesecon:get_conductor_off(onstate)
|
function mesecon:get_conductor_off(onstate)
|
||||||
for i, conductor in ipairs(mesecon.conductors) do
|
if minetest.registered_nodes[nodename].mesecons
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.condcutor then
|
||||||
|
return minetest.registered_nodes[nodename].mesecons.conductor.offstate
|
||||||
|
end
|
||||||
|
for i, conductor in ipairs(mesecon.conductors) do --TODO
|
||||||
if conductor.onstate == onstate then
|
if conductor.onstate == onstate then
|
||||||
return conductor.offstate
|
return conductor.offstate
|
||||||
end
|
end
|
||||||
@ -130,7 +180,12 @@ function mesecon:get_conductor_off(onstate)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mesecon:is_conductor_on(name)
|
function mesecon:is_conductor_on(name)
|
||||||
for i, conductor in ipairs(mesecon.conductors) do
|
if minetest.registered_nodes[nodename].mesecons
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.condcutor
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.condcutor.state == mesecon.state.on then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
for i, conductor in ipairs(mesecon.conductors) do --TODO
|
||||||
if conductor.onstate == name then
|
if conductor.onstate == name then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@ -139,7 +194,12 @@ function mesecon:is_conductor_on(name)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mesecon:is_conductor_off(name)
|
function mesecon:is_conductor_off(name)
|
||||||
for i, conductor in ipairs(mesecon.conductors) do
|
if minetest.registered_nodes[nodename].mesecons
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.condcutor
|
||||||
|
and minetest.registered_nodes[nodename].mesecons.condcutor.state == mesecon.state.off then
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
for i, conductor in ipairs(mesecon.conductors) do --TODO
|
||||||
if conductor.offstate == name then
|
if conductor.offstate == name then
|
||||||
return true
|
return true
|
||||||
end
|
end
|
||||||
@ -148,11 +208,21 @@ function mesecon:is_conductor_off(name)
|
|||||||
end
|
end
|
||||||
|
|
||||||
function mesecon:is_conductor(name)
|
function mesecon:is_conductor(name)
|
||||||
|
--TODO: simplify
|
||||||
return mesecon:is_conductor_on(name) or mesecon:is_conductor_off(name)
|
return mesecon:is_conductor_on(name) or mesecon:is_conductor_off(name)
|
||||||
end
|
end
|
||||||
|
|
||||||
function mesecon:conductor_get_rules(node)
|
function mesecon:conductor_get_rules(node)
|
||||||
for i, conductor in ipairs(mesecon.conductors) do
|
if minetest.registered_nodes[node.name].mesecons
|
||||||
|
and minetest.registered_nodes[node.name].mesecons.condcutor then
|
||||||
|
local rules = minetest.registered_nodes[node.name].mesecons.condcutor.rules
|
||||||
|
if type(rules) == 'function' then
|
||||||
|
return rules(node)
|
||||||
|
else
|
||||||
|
return rules
|
||||||
|
end
|
||||||
|
end
|
||||||
|
for i, conductor in ipairs(mesecon.conductors) do --TODO
|
||||||
if conductor.onstate == node.name
|
if conductor.onstate == node.name
|
||||||
or conductor.offstate == node.name then
|
or conductor.offstate == node.name then
|
||||||
if conductor.get_rules ~= nil then
|
if conductor.get_rules ~= nil then
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
--very old:
|
||||||
|
|
||||||
function mesecon:add_receptor_node(name, rules, get_rules)
|
function mesecon:add_receptor_node(name, rules, get_rules)
|
||||||
if get_rules==nil and rules==nil then
|
if get_rules==nil and rules==nil then
|
||||||
rules=mesecon:get_rules("default")
|
rules=mesecon:get_rules("default")
|
||||||
@ -11,3 +13,81 @@ function mesecon:add_receptor_node_off(name, rules, get_rules)
|
|||||||
end
|
end
|
||||||
table.insert(mesecon.receptors, {offstate = name, rules = rules, get_rules = get_rules})
|
table.insert(mesecon.receptors, {offstate = name, rules = rules, get_rules = get_rules})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
--old:
|
||||||
|
|
||||||
|
function mesecon:register_receptor(onstate, offstate, rules, get_rules)
|
||||||
|
if get_rules == nil and rules == nil then
|
||||||
|
rules = mesecon:get_rules("default")
|
||||||
|
end
|
||||||
|
|
||||||
|
table.insert(mesecon.receptors,
|
||||||
|
{onstate = onstate,
|
||||||
|
offstate = offstate,
|
||||||
|
rules = rules,
|
||||||
|
get_rules = get_rules})
|
||||||
|
end
|
||||||
|
|
||||||
|
function mesecon:register_effector(onstate, offstate, input_rules, get_input_rules)
|
||||||
|
if get_input_rules==nil and input_rules==nil then
|
||||||
|
rules=mesecon:get_rules("default")
|
||||||
|
end
|
||||||
|
table.insert(mesecon.effectors,
|
||||||
|
{onstate = onstate,
|
||||||
|
offstate = offstate,
|
||||||
|
input_rules = input_rules,
|
||||||
|
get_input_rules = get_input_rules})
|
||||||
|
end
|
||||||
|
|
||||||
|
function mesecon:receptor_on(pos, rules)
|
||||||
|
if rules == nil then
|
||||||
|
rules = mesecon:get_rules("default")
|
||||||
|
end
|
||||||
|
|
||||||
|
for i, rule in ipairs(rules) do
|
||||||
|
local np = {
|
||||||
|
x = pos.x + rule.x,
|
||||||
|
y = pos.y + rule.y,
|
||||||
|
z = pos.z + rule.z}
|
||||||
|
if mesecon:rules_link(pos, np, rules) then
|
||||||
|
mesecon:turnon(np, pos)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function mesecon:receptor_off(pos, rules)
|
||||||
|
if rules == nil then
|
||||||
|
rules = mesecon:get_rules("default")
|
||||||
|
end
|
||||||
|
|
||||||
|
for i, rule in ipairs(rules) do
|
||||||
|
local np = {
|
||||||
|
x = pos.x + rule.x,
|
||||||
|
y = pos.y + rule.y,
|
||||||
|
z = pos.z + rule.z}
|
||||||
|
if mesecon:rules_link(pos, np, rules) and not mesecon:connected_to_pw_src(np) then
|
||||||
|
mesecon:turnoff(np, pos)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
function mesecon:register_on_signal_on(action)
|
||||||
|
table.insert(mesecon.actions_on, action)
|
||||||
|
end
|
||||||
|
|
||||||
|
function mesecon:register_on_signal_off(action)
|
||||||
|
table.insert(mesecon.actions_off, action)
|
||||||
|
end
|
||||||
|
|
||||||
|
function mesecon:register_on_signal_change(action)
|
||||||
|
table.insert(mesecon.actions_change, action)
|
||||||
|
end
|
||||||
|
|
||||||
|
function mesecon:register_conductor (onstate, offstate, rules, get_rules)
|
||||||
|
if rules == nil then
|
||||||
|
rules = mesecon:get_rules("default")
|
||||||
|
end
|
||||||
|
table.insert(mesecon.conductors, {onstate = onstate, offstate = offstate, rules = rules, get_rules = get_rules})
|
||||||
|
end
|
||||||
|
|
||||||
|
mesecon:add_rules("default", mesecon.rules.default)
|
||||||
|
19
mesecons/presets.lua
Normal file
19
mesecons/presets.lua
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
mesecon.rules={}
|
||||||
|
mesecon.state = {}
|
||||||
|
|
||||||
|
mesecon.rules.default =
|
||||||
|
{{x=0, y=0, z=-1},
|
||||||
|
{x=1, y=0, z=0},
|
||||||
|
{x=-1, y=0, z=0},
|
||||||
|
{x=0, y=0, z=1},
|
||||||
|
{x=1, y=1, z=0},
|
||||||
|
{x=1, y=-1, z=0},
|
||||||
|
{x=-1, y=1, z=0},
|
||||||
|
{x=-1, y=-1, z=0},
|
||||||
|
{x=0, y=1, z=1},
|
||||||
|
{x=0, y=-1, z=1},
|
||||||
|
{x=0, y=1, z=-1},
|
||||||
|
{x=0, y=-1, z=-1}}
|
||||||
|
|
||||||
|
mesecon.state.on = "on"
|
||||||
|
mesecon.state.off = "off"
|
Loading…
Reference in New Issue
Block a user