145 lines
No EOL
4.3 KiB
Text
145 lines
No EOL
4.3 KiB
Text
|
|
class "Crestrictor_manager"
|
|
|
|
function Crestrictor_manager:__init(obj)
|
|
self.object = obj
|
|
self.base_out_restrictions = {}
|
|
self.base_in_restrictions = {}
|
|
self.out_restrictions = utils.parse_names(self.object:out_restrictions())
|
|
for k,v in pairs(self.out_restrictions) do
|
|
self.base_out_restrictions[v] = true
|
|
end
|
|
self.in_restrictions = utils.parse_names(self.object:in_restrictions())
|
|
for k,v in pairs(self.in_restrictions) do
|
|
self.base_in_restrictions[v] = true
|
|
end
|
|
end
|
|
|
|
|
|
----------------------------------------------------------------------------------------------------------------------
|
|
-- STALKER restrictions
|
|
----------------------------------------------------------------------------------------------------------------------
|
|
--' Äàííàÿ ôóíêöèÿ âû÷èòûâàåò èç ëîãèêè íàáîð ðåñòðèêòîðîâ, êîòîðûå íóæíî ïðîñòàâèòü ïåðñîíàæó.
|
|
function Crestrictor_manager:reset_restrictions(st, section)
|
|
--printf("reset restrictions obj=%s section=%s", self.object:name(), tostring(section))
|
|
|
|
local actual_ini = st.ini
|
|
|
|
local out_restr_string = get_param_string(utils.cfg_get_string(actual_ini, section, "out_restr", nil, false, "", ""), self.object)
|
|
|
|
--' Âû÷èòûâàåì íîâûå àóò ðåñòðèêòîðû
|
|
local new_out_restr = utils.parse_names(out_restr_string)
|
|
|
|
--' Óçíàåì ïðî ñóùåñòâóþùèå àóò ðåñòðèêòîðû
|
|
local old_out_restr = utils.parse_names(self.object:out_restrictions())
|
|
|
|
--[[
|
|
printf("old out_restrs table:")
|
|
print_table(old_out_restr)
|
|
printf("new out_restrs table:")
|
|
print_table(new_out_restr)
|
|
]]--
|
|
|
|
--' Ïðîâåðÿåì ïîÿâèëèñü ëè íîâûå ðåñòðèêòîðû.
|
|
local ins_restr = {} --' Òóò ïîìåñòèì ðåñòðèêòîðû, êîòîðûå íóæíî äîáàâèòü
|
|
local del_restr = {} --' Òóò ïîìåñòèì ðåñòðèêòîðû, êîòîðûå íóæíî óäàëèòü
|
|
for k,v in pairs(old_out_restr) do
|
|
local exist_rest = false
|
|
for kk,vv in pairs(new_out_restr) do
|
|
if v == vv then
|
|
exist_rest = true
|
|
break
|
|
end
|
|
end
|
|
if exist_rest == false and self.base_out_restrictions[v] ~= true then
|
|
table.insert(del_restr, v)
|
|
end
|
|
end
|
|
for k,v in pairs(new_out_restr) do
|
|
local exist_rest = false
|
|
for kk,vv in pairs(old_out_restr) do
|
|
if v == vv then
|
|
exist_rest = true
|
|
break
|
|
end
|
|
end
|
|
if exist_rest == false and v ~= "nil" then
|
|
table.insert(ins_restr, v)
|
|
end
|
|
end
|
|
|
|
--'Óäàëÿåì ñòàðûå àóò ðåñòðèêòîðû. àïïëàèì íîâûå.
|
|
for k,v in pairs(del_restr) do
|
|
--printf("old out_restr [%s] deleted", v)
|
|
self.object:remove_restrictions(v, "")
|
|
end
|
|
for k,v in pairs(ins_restr) do
|
|
--printf("new out_restr [%s] added", v)
|
|
self.object:add_restrictions(v, "")
|
|
end
|
|
|
|
|
|
|
|
--' Âû÷èòûâàåì íîâûå ÈÍ ðåñòðèêòîðû
|
|
local in_restr_string = get_param_string(utils.cfg_get_string(actual_ini, section, "in_restr", nil, false, "", ""), self.object)
|
|
|
|
--' Âû÷èòûâàåì íîâûå àóò ðåñòðèêòîðû
|
|
local new_in_restr = utils.parse_names(in_restr_string)
|
|
|
|
--' Óçíàåì ïðî ñóùåñòâóþùèå ÈÍ ðåñòðèêòîðû
|
|
local old_in_restr = utils.parse_names(self.object:in_restrictions())
|
|
|
|
--[[
|
|
printf("old in_restrs table:")
|
|
print_table(old_in_restr)
|
|
printf("new in_restrs table:")
|
|
print_table(new_in_restr)
|
|
]]--
|
|
|
|
--' Ïðîâåðÿåì ïîÿâèëèñü ëè íîâûå ðåñòðèêòîðû.
|
|
ins_restr = {} --' Òóò ïîìåñòèì ðåñòðèêòîðû, êîòîðûå íóæíî äîáàâèòü
|
|
del_restr = {} --' Òóò ïîìåñòèì ðåñòðèêòîðû, êîòîðûå íóæíî óäàëèòü
|
|
for k,v in pairs(old_in_restr) do
|
|
local exist_rest = false
|
|
for kk,vv in pairs(new_in_restr) do
|
|
if v == vv then
|
|
exist_rest = true
|
|
break
|
|
end
|
|
end
|
|
if exist_rest == false and self.base_in_restrictions[v] ~= true then
|
|
table.insert(del_restr, v)
|
|
end
|
|
end
|
|
for k,v in pairs(new_in_restr) do
|
|
local exist_rest = false
|
|
for kk,vv in pairs(old_in_restr) do
|
|
if v == vv then
|
|
exist_rest = true
|
|
break
|
|
end
|
|
end
|
|
if exist_rest == false and v ~= "nil" then
|
|
table.insert(ins_restr, v)
|
|
end
|
|
end
|
|
|
|
--'Óäàëÿåì ñòàðûå àóò ðåñòðèêòîðû. àïïëàèì íîâûå.
|
|
for k,v in pairs(del_restr) do
|
|
--printf("old in_restr [%s] deleted", v)
|
|
self.object:remove_restrictions("", v)
|
|
end
|
|
for k,v in pairs(ins_restr) do
|
|
--printf("new in_restr [%s] added", v)
|
|
self.object:add_restrictions("", v)
|
|
end
|
|
|
|
end
|
|
|
|
|
|
function get_restrictor_manager(npc)
|
|
if db.storage[npc:id()].restrictor_manager == nil then
|
|
db.storage[npc:id()].restrictor_manager = Crestrictor_manager(npc)
|
|
end
|
|
return db.storage[npc:id()].restrictor_manager
|
|
end |