

combat_sectors = {}

function register_combat_restrictor(restrictor)
	if combat_sectors[restrictor:name()] == nil then
		combat_sectors[restrictor:name()] = restrictor
	end
end


function apply_combat_restrictor(npc)
	-- итерируемся по рестрикторам, ищем в котором мы находимся и апплаим его
	local npc_position = npc:position()
	for k,v in pairs(combat_sectors) do
		if v:inside(npc_position) then
			npc:add_restrictions(k, "")
		end
	end
end


function clear_combat_restrictor(npc)
	local out_restr = utils.parse_names(npc:out_restrictions())
	
	for k,v in pairs(out_restr) do
		if combat_sectors[v] ~= nil then
			npc:remove_restrictions(v, "")
		end	
	end
end




function accessible_job(se_obj, way_name)
	local obj = db.storage[se_obj.id]
	if obj == nil then
		return false
	end
	-- Берем клиентский объект НПС	
	obj = obj.object
	if obj == nil then
		return false
	end

	local npc_position = obj:position()
	local job_position = patrol(way_name):point(0)
		
	-- Берем рестриктор по позиции пути	
	-- Берем рестриктор по позиции НПС
	local is_npc_inside = false
	for k,v in pairs(combat_sectors) do
		if v:inside(npc_position) then
			is_npc_inside = true
			if v:inside(job_position) then
				return true
			end
		end
	end
		
	-- Если они совпадают - то истина, иначе ложь.
	return is_npc_inside ~= true
end


function get_job_restrictor(way_name)
	-- Берем смарт по позиции пути
	local job_position = patrol(way_name):point(0)
	for k,v in pairs(combat_sectors) do
		if v:inside(job_position) then
			return k
		end
	end
	-- Возвращаем его имя
	return ""
end