local ltx

function load_job(smart)
		printf("LOAD JOB %s", smart:name())
		-- Иерархия задается таблицей вида:
--[[
		self.jobs = {
				{
				_precondition_is_monster = true,
				_precondition_function   = function(se_obj) ... end,
				_prior = ...,
				jobs =  {
								_precondition_function   = function(se_obj) ... end,
								_prior = ...
								job_id = ...
								},
								{
								_precondition_function   = function(se_obj) ... end,
								_prior = ...
								job_id = ...
								}
				},
				{
				_precondition_is_monster = false,
				_prior = ...
				job_id = ...
				},

				...
				{},
		}
]]

		local gname = smart:name()
		local t
		local board = sim_board.get_sim_board()
		local job_table = {}


		ltx =  "" ..

				"[meet@generic_lager]\n"..
				"close_distance 		= {=is_wounded} 0, 2\n"..
				"close_anim 			= {=is_wounded} nil, {!is_squad_commander} nil, {=actor_has_weapon} threat_na, talk_default\n"..
				"close_snd_hello 		= {=is_wounded} nil, {!is_squad_commander} nil, {=actor_enemy} nil, {=actor_has_weapon} meet_hide_weapon, meet_hello\n"..
				"close_snd_bye 			= {=is_wounded} nil, {!is_squad_commander} nil, {=actor_enemy} nil, {=actor_has_weapon} nil, meet_hello\n"..
				"close_victim 			= {=is_wounded} nil, {!is_squad_commander} nil, actor\n"..
				"far_distance 			= 0\n"..
				"far_anim 				= nil\n"..
				"far_snd 				= nil\n"..
				"far_victim 			= nil\n"..
				"use					= {=is_wounded} false, {!is_squad_commander} false, {=actor_enemy} false, {=has_enemy} false, {=actor_has_weapon} false, {=dist_to_actor_le(3)} true, false\n"..
				"snd_on_use 			= {=is_wounded} nil, {=actor_enemy} nil, {!is_squad_commander} meet_use_no_talk_leader, {=actor_has_weapon} meet_use_no_weapon, {=has_enemy} meet_use_no_fight, {=dist_to_actor_le(3)} meet_use_no_default, nil\n"..
				"meet_dialog			= nil\n"..
				"abuse					= {=has_enemy} false, true\n"..
				"trade_enable			= true\n"..
				"allow_break			= true\n"..
				"use_text				= nil\n"..

				"[meet@generic_animpoint]\n"..
				"close_distance 		= 0\n"..
				"close_anim 			= {!is_squad_commander} nil, nil\n"..
				"close_snd_hello 		= {!is_squad_commander} nil, nil\n"..
				"close_snd_bye 			= {!is_squad_commander} nil, nil\n"..
				"close_victim 			= {!is_squad_commander} nil, nil\n"..
				"far_distance 			= 0\n"..
				"far_anim 				= nil\n"..
				"far_snd 				= nil\n"..
				"far_victim 			= nil\n"..
				"use					= {=is_wounded} false, {!is_squad_commander} false, {=actor_enemy} false, {=has_enemy} false, {=actor_has_weapon} false, {=dist_to_actor_le(3)} true, false\n"..
				"snd_on_use 			= {=is_wounded} nil, {=actor_enemy} nil, {!is_squad_commander} meet_use_no_talk_leader, {=actor_has_weapon} meet_use_no_weapon, {=has_enemy} meet_use_no_fight, {=dist_to_actor_le(3)} meet_use_no_default, nil\n"..
				"meet_dialog			= nil\n"..
				"abuse					= {=has_enemy} false, true\n"..
				"trade_enable			= true\n"..
				"allow_break			= true\n"..
				"meet_on_talking 		= false\n"..
				"use_text				= nil\n"


--'------------------------------------------------------------------------
--'         РАБОТЫ СТАЛКЕРОВ
--'------------------------------------------------------------------------
		local stalker_jobs = {_precondition_is_monster = false, _prior = 60, jobs = {}}

		--'------------------------------------------------------------------------
		--'                      ОБЫЧНОЕ СОСТОЯНИЕ
		--'------------------------------------------------------------------------
				--'------------------------------------------------------------------------
				--'                          GENERIC POINT
				--'------------------------------------------------------------------------
				-- Проверяем наличие патрулей обхода в лагере.
				local stalker_generic_point = {_prior = 3, jobs = {}}
				for it=1,20 do
						-- Необходимо вычитать количество работ из названия точки пути.
						local name = gname.."_point_"..it

						-- добавляем должность
						t = {   _prior = 3,
								job_id = { section = "logic@"..name,
											 job_type = "point_job" }
								}


						table.insert(stalker_generic_point.jobs, t)

						-- добавляем описание должности в лтх.
						local job_ltx = "[logic@"..name.."]\n"..
										"active = cover@"..name.."\n"..

										"[cover@"..name.."]\n"..
										"meet = meet@generic_lager\n"..
										"smart = "..gname.."\n"..
										"radius_min = 3\n"..
										"radius_max = 8\n"..
										"use_attack_direction = false\n"..
										"anim = {!npc_community(zombied)} sit, guard\n"

						if smart.def_restr ~= nil then
								job_ltx = job_ltx .."out_restr = "..smart.def_restr.."\n"
						end

						if smart.base_on_actor_control ~= nil and
							 smart.base_on_actor_control.ignore_zone ~= nil
						then
							job_ltx = job_ltx .."combat_ignore_cond = {=npc_in_zone(smart.base_on_actor_control.ignore_zone)} true \n"..
												"combat_ignore_keep_when_attacked = true \n"
						end

						ltx = ltx..job_ltx
				end
				table.insert(stalker_jobs.jobs, stalker_generic_point)

				--'------------------------------------------------------------------------
				--'                           SURGE
				--'------------------------------------------------------------------------
				-- Проверяем наличие путей брожения внутри лагеря.
				local stalker_surge = {_prior = 50, jobs = {}}

				it = 1
				while level.patrol_path_exists(gname.."_surge_"..it.."_walk") do
						-- Необходимо вычитать количество работ из названия точки пути.
						local way_name = gname.."_surge_"..it.."_walk"

						-- добавляем должность
						t = {   _prior = 50,
								job_id = {  section = "logic@"..way_name,
											job_type = "path_job" },
								_precondition_params = { },
								_precondition_function =    function(se_obj, smart, precond_params)
																return xr_conditions.surge_started()
															end
								}
						table.insert(stalker_surge.jobs, t)

						-- добавляем описание должности в лтх.
						local job_ltx = "[logic@"..way_name.."]\n"..
														"active = walker@"..way_name.."\n"..

														"[walker@"..way_name.."]\n"..
														"sound_idle = state\n"..
														"use_camp = true\n"..
														"meet = meet@generic_lager\n"..
														"path_walk = surge_"..it.."_walk\n"..
														"def_state_standing = guard\n"..
														"def_state_moving = patrol\n"

						if level.patrol_path_exists(gname.."_surge_"..it.."_look") then
								job_ltx = job_ltx.."path_look = surge_"..it.."_look\n"
						end

						if smart.def_restr ~= nil then
								job_ltx = job_ltx .."out_restr = "..smart.def_restr.."\n"
						end

						if smart.base_on_actor_control ~= nil and
							 smart.base_on_actor_control.ignore_zone ~= nil and
							 xr_gulag.job_in_restrictor(smart, smart.base_on_actor_control.ignore_zone, way_name)
						then
							job_ltx = job_ltx .."combat_ignore_cond = {=npc_in_zone(smart.base_on_actor_control.ignore_zone)} true \n"..
												"combat_ignore_keep_when_attacked = true \n"
						end

						ltx = ltx..job_ltx
						it = it + 1
				end
				if it > 1 then table.insert(stalker_jobs.jobs, stalker_surge) end
				
				-- START IX-Ray
				--'------------------------------------------------------------------------
				--'                         kamp
				--'------------------------------------------------------------------------
				local stalker_kamp = {_prior = 14, jobs = {}}
				it = 1
				while level.patrol_path_exists(gname.."_kamp_"..it) do
						-- Необходимо вычитать количество работ из названия точки пути.
						local way_name = gname.."_kamp_"..it
						local job_count = 5

						for i = 1, job_count do
							-- добавляем должность
							t = {   _prior = 10+i,
									job_id = {  section = "logic@"..way_name,
												job_type = "point_job" },
									_precondition_params = { },
									_precondition_function =    function(se_obj, smart, precond_params)
																	if smart.smart_alarm_time == nil then
																		return true
																	end

																	if smart.safe_restr == nil then
																		return true
																	end

																	if precond_params.is_safe_job == nil then
																		precond_params.is_safe_job = xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name)
																	end

																	return precond_params.is_safe_job ~= false
																end
									}
							table.insert(stalker_kamp.jobs, t)
						end
						-- добавляем описание должности в лтх.
						local job_ltx = "[logic@"..way_name.."]\n"..
														"active = kamp@"..way_name.."\n"..

														"[kamp@"..way_name.."]\n"..
														"meet = meet@generic_lager\n"..
														"center_point = kamp_"..it.."\n"

						if smart.def_restr ~= nil then
								job_ltx = job_ltx .."out_restr = "..smart.def_restr.."\n"
						end

						if smart.base_on_actor_control ~= nil and
							 smart.base_on_actor_control.ignore_zone ~= nil and
							 xr_gulag.job_in_restrictor(smart, smart.base_on_actor_control.ignore_zone, way_name)
						then
							job_ltx = job_ltx .."combat_ignore_cond = {=npc_in_zone(smart.base_on_actor_control.ignore_zone)} true \n"..
												"combat_ignore_keep_when_attacked = true \n"
						end

						ltx = ltx..job_ltx
						it = it + 1
				end
				if it > 1 then table.insert(stalker_jobs.jobs, stalker_kamp) end
				-- END IX-Ray
				
				--'------------------------------------------------------------------------
				--'                         SLEEP
				--'------------------------------------------------------------------------
				-- Проверяем наличие путей для сна.
				local stalker_sleep = {_prior = 10, jobs = {}}
				it = 1
				while level.patrol_path_exists(gname.."_sleep_"..it) do
						-- Необходимо вычитать количество работ из названия точки пути.
						local way_name = gname.."_sleep_"..it

						-- добавляем должность
						t = {   _prior = 10,
								job_id = {  section = "logic@"..way_name,
											job_type = "path_job" },
								_precondition_params = { },
								_precondition_function =    function(se_obj, smart, precond_params)
																if se_obj:community() == "zombied" then
																	return false
																end


																if not in_time_interval(21,7) then
																	return false
																end

																if smart.smart_alarm_time == nil then
																	return true
																end

																if smart.safe_restr == nil then
																	return true
																end

																if precond_params.is_safe_job == nil then
																	precond_params.is_safe_job = xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name)
																end

																return precond_params.is_safe_job ~= false
															end
								}
						table.insert(stalker_sleep.jobs, t)

						-- добавляем описание должности в лтх.
						local job_ltx = "[logic@"..way_name.."]\n"..
														"active = sleeper@"..way_name.."\n"..

														"[sleeper@"..way_name.."]\n"..
														"path_main = sleep_"..it.."\n"

						if smart.safe_restr ~= nil and xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name) then
							job_ltx = job_ltx .. "invulnerable = {=npc_in_zone(smart.safe_restr)} true\n"
						end

						if smart.def_restr ~= nil then
								job_ltx = job_ltx .."out_restr = "..smart.def_restr.."\n"
						end

						if smart.base_on_actor_control ~= nil and
							 smart.base_on_actor_control.ignore_zone ~= nil and
							 xr_gulag.job_in_restrictor(smart, smart.base_on_actor_control.ignore_zone, way_name)
						then
							job_ltx = job_ltx .."combat_ignore_cond = {=npc_in_zone(smart.base_on_actor_control.ignore_zone)} true \n"..
												"combat_ignore_keep_when_attacked = true \n"
						end

						ltx = ltx..job_ltx
						it = it + 1
				end
				if it > 1 then table.insert(stalker_jobs.jobs, stalker_sleep) end

				--'------------------------------------------------------------------------
				--'                           COLLECTOR
				--'------------------------------------------------------------------------
				-- Проверяем наличие путей брожения внутри лагеря.
				local stalker_collector = {_prior = 25, jobs = {}}
				it = 1
				while level.patrol_path_exists(gname.."_collector_"..it.."_walk") do
						-- Необходимо вычитать количество работ из названия точки пути.
						local way_name = gname.."_collector_"..it.."_walk"

						-- добавляем должность
						t = {   _prior = 25,
								job_id = {  section = "logic@"..way_name,
											job_type = "path_job" },
								_precondition_params = { },
								_precondition_function =    function(se_obj, smart, precond_params)
																if se_obj:community() == "zombied" then
																	return false
																end

																-- Проверяем, что у НПС есть детектор.
																local st = db.storage[se_obj.id]

																if st == nil then
																	return false
																end

																local npc = st.object

																if npc == nil then
																	return false
																end

																local detectors = { "detector_simple", "detector_advanced", "detector_elite", "detector_scientific" }

																for k,v in pairs(detectors) do
																	local obj = npc:object(v)
																	if obj ~= nil then
																		return true
																	end
																end
																return false
															end
								}
						table.insert(stalker_collector.jobs, t)

						-- добавляем описание должности в лтх.
						local job_ltx = "[logic@"..way_name.."]\n"..
														"active = walker@"..way_name.."\n"..

														"[walker@"..way_name.."]\n"..
														"sound_idle = state\n"..
														"meet = meet@generic_lager\n"..
														"path_walk = collector_"..it.."_walk\n"..
														"def_state_standing = guard\n"..
														"def_state_moving = patrol\n"

						if level.patrol_path_exists(gname.."_collector_"..it.."_look") then
								job_ltx = job_ltx.."path_look = collector_"..it.."_look\n"
						end

						if smart.safe_restr ~= nil and xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name) then
							job_ltx = job_ltx .. "invulnerable = {=npc_in_zone(smart.safe_restr)} true\n"
						end

						if smart.def_restr ~= nil then
								job_ltx = job_ltx .."out_restr = "..smart.def_restr.."\n"
						end

						if smart.base_on_actor_control ~= nil and
							 smart.base_on_actor_control.ignore_zone ~= nil and
							 xr_gulag.job_in_restrictor(smart, smart.base_on_actor_control.ignore_zone, way_name)
						then
							job_ltx = job_ltx .."combat_ignore_cond = {=npc_in_zone(smart.base_on_actor_control.ignore_zone)} true \n"..
												"combat_ignore_keep_when_attacked = true \n"
						end

						ltx = ltx..job_ltx
						it = it + 1
				end
				if it > 1 then table.insert(stalker_jobs.jobs, stalker_collector) end

				--'------------------------------------------------------------------------
				--'                           WALKER
				--'------------------------------------------------------------------------
				-- Проверяем наличие путей брожения внутри лагеря.
				local stalker_walker = {_prior = 15, jobs = {}}
				it = 1

				while level.patrol_path_exists(gname.."_walker_"..it.."_walk") do

						-- Необходимо вычитать количество работ из названия точки пути.
						local way_name = gname.."_walker_"..it.."_walk"

						-- добавляем должность
						t = {   _prior = 15,
								job_id = {  section = "logic@"..way_name,
											job_type = "path_job" },
								_precondition_params = { },
								_precondition_function =    function(se_obj, smart, precond_params)
																if smart.smart_alarm_time == nil then
																	return true
																end

																if smart.safe_restr == nil then
																	return true
																end

																if precond_params.is_safe_job == nil then
																	precond_params.is_safe_job = xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name)
																end

																return precond_params.is_safe_job ~= false
															end
								}
						table.insert(stalker_walker.jobs, t)

						-- добавляем описание должности в лтх.
						local job_ltx = "[logic@"..way_name.."]\n"..
														"active = walker@"..way_name.."\n"..

														"[walker@"..way_name.."]\n"..
														"sound_idle = state\n"..
														"meet = meet@generic_lager\n"..
														"path_walk = walker_"..it.."_walk\n"..
														"def_state_standing = guard\n"..
														"def_state_moving = patrol\n"

						if level.patrol_path_exists(gname.."_walker_"..it.."_look") then
								job_ltx = job_ltx.."path_look = walker_"..it.."_look\n"
						end

						if smart.safe_restr ~= nil and xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name) then
							job_ltx = job_ltx .. "invulnerable = {=npc_in_zone(smart.safe_restr)} true\n"
						end

						if smart.def_restr ~= nil then
								job_ltx = job_ltx .."out_restr = "..smart.def_restr.."\n"
						end

						if smart.base_on_actor_control ~= nil and
							 smart.base_on_actor_control.ignore_zone ~= nil and
							 xr_gulag.job_in_restrictor(smart, smart.base_on_actor_control.ignore_zone, way_name)
						then
							job_ltx = job_ltx .."combat_ignore_cond = {=npc_in_zone(smart.base_on_actor_control.ignore_zone)} true \n"..
												"combat_ignore_keep_when_attacked = true \n"
						end

						ltx = ltx..job_ltx
						it = it + 1
				end
				if it > 1 then table.insert(stalker_jobs.jobs, stalker_walker) end

				--'------------------------------------------------------------------------
				--'                          PATROL
				--'------------------------------------------------------------------------
				-- Проверяем наличие патрулей обхода в лагере.
				local stalker_patrol = {_prior = 20, jobs = {}}
				it = 1
				while level.patrol_path_exists(gname.."_patrol_"..it.."_walk") do
						-- Необходимо вычитать количество работ из названия точки пути.
						local way_name = gname.."_patrol_"..it.."_walk"
						local ptr = patrol(way_name)
						local wp_prop = utils.parse_waypoint_data(way_name, ptr:flags(0), ptr:name(0))
						local job_count = 3
						if wp_prop.count ~= nil then
								job_count = wp_prop.count
						end

						for i = 1, job_count do
								-- добавляем должность
								t = {   _prior = 20,
										job_id = { section = "logic@"..way_name,
													 job_type = "path_job" },
										_precondition_params = { },
										_precondition_function =    function(se_obj, smart, precond_params)
																		if se_obj:community() == "zombied" then
																			return false
																		end


																		if smart.smart_alarm_time == nil then
																			return true
																		end

																		if smart.safe_restr == nil then
																			return true
																		end

																		if precond_params.is_safe_job == nil then
																			precond_params.is_safe_job = xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name)
																		end

																		return precond_params.is_safe_job ~= false
																	end
										}
								table.insert(stalker_patrol.jobs, t)
						end

						-- добавляем описание должности в лтх.
						local job_ltx = "[logic@"..way_name.."]\n"..
														"active = patrol@"..way_name.."\n"..

														"[patrol@"..way_name.."]\n"..
														"meet = meet@generic_lager\n"..
														"formation = back\n"..
														"path_walk = patrol_"..it.."_walk\n"..
														"on_signal = end| %=search_gulag_job%\n"

						if level.patrol_path_exists(gname.."_patrol_"..it.."_look") then
								job_ltx = job_ltx.."path_look = patrol_"..it.."_look\n"
						end

						if smart.safe_restr ~= nil and xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name) then
							job_ltx = job_ltx .. "invulnerable = {=npc_in_zone(smart.safe_restr)} true\n"
						end

						if smart.def_restr ~= nil then
								job_ltx = job_ltx .."out_restr = "..smart.def_restr.."\n"
						end

						ltx = ltx..job_ltx
						it = it + 1
				end
				if it > 1 then table.insert(stalker_jobs.jobs, stalker_patrol) end


				--'------------------------------------------------------------------------
				--'                          XR_ANIMPOINT
				--'------------------------------------------------------------------------
				-- Проверяем наличие патрулей обхода в лагере.
				it = 1
				while se_smart_cover.registered_smartcovers[gname.."_animpoint_"..it] ~= nil do
						-- Необходимо вычитать количество работ из названия точки пути.
						local smartcover_name = gname.."_animpoint_"..it

						-- добавляем должность
						t = {   _prior = 15,
								job_id = { section = "logic@"..smartcover_name,
											 job_type = "smartcover_job" },
								_precondition_params = { },
								_precondition_function =    function(se_obj, smart, precond_params)
																--if smart.smart_alarm_time == nil then
																	--return true
																--end

																--if smart.safe_restr == nil then
																--	return true
																--end

																if se_obj:community() == "zombied" then
																	return false
																end

																--if precond_params.is_safe_job == nil then
																--	precond_params.is_safe_job = xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name)
																--end

																--return precond_params.is_safe_job ~= false
																return true
															end

								}
						table.insert(stalker_jobs.jobs, t)

						-- добавляем описание должности в лтх.
						local job_ltx = "[logic@"..smartcover_name.."]\n"..
										"active = animpoint@"..smartcover_name.."\n"..

										"[animpoint@"..smartcover_name.."]\n"..
										"meet = meet@generic_animpoint\n"..
										"cover_name = "..smartcover_name.."\n"

						if smart.def_restr ~= nil then
								job_ltx = job_ltx .."out_restr = "..smart.def_restr.."\n"
						end

						if smart.safe_restr ~= nil and xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name) then
							job_ltx = job_ltx .. "invulnerable = {=npc_in_zone(smart.safe_restr)} true\n"
						end

						if smart.base_on_actor_control ~= nil and
							 smart.base_on_actor_control.ignore_zone ~= nil
						then
							job_ltx = job_ltx .."combat_ignore_cond = {=npc_in_zone(smart.base_on_actor_control.ignore_zone)} true \n"..
												"combat_ignore_keep_when_attacked = true \n"
						end

						ltx = ltx..job_ltx
						it = it + 1
				end


				--'------------------------------------------------------------------------
				--'                              GUARD
				--'------------------------------------------------------------------------
				-- Проверяем наличие часовых в лагере.
				local stalker_guard = {_prior = 25, jobs = {}}
				it = 1
				while level.patrol_path_exists(gname.."_guard_"..it.."_walk") do
						-- Необходимо вычитать количество работ из названия точки пути.
						local way_name = gname.."_guard_"..it.."_walk"
						--local guard_timeout = tostring(math.random(180,300))*1000
						local guard_timeout = tostring(math.random(20,21))*1000

						-- добавляем должность
						t = { 	_prior = 25,
								job_id = { section = "logic@"..way_name,
												 job_type = "path_job" },
								_precondition_params = { },
								_precondition_function =    function(se_obj, smart, precond_params)
																if smart.smart_alarm_time == nil then
																	return true
																end

																if smart.safe_restr == nil then
																	return true
																end

																if precond_params.is_safe_job == nil then
																	precond_params.is_safe_job = xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name)
																end

																return precond_params.is_safe_job ~= false
															end
								}
						table.insert(stalker_guard.jobs, t)

						-- добавляем описание должности в лтх.
						local job_ltx = "[logic@"..way_name.."]\n"..
														"active = walker@"..way_name.."\n"..

														"[walker@"..way_name.."]\n"..
														"meet = meet@generic_lager\n"..
														"path_walk = guard_"..it.."_walk\n"..
														"path_look = guard_"..it.."_look\n"

						if smart.safe_restr ~= nil and xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name) then
							job_ltx = job_ltx .. "invulnerable = {=npc_in_zone(smart.safe_restr)} true\n"
						end

						if smart.def_restr ~= nil then
								job_ltx = job_ltx .."out_restr = "..smart.def_restr.."\n"
						end

						local job1_ltx ="[walker1@"..way_name.."]\n"..
														"meet = meet@generic_lager\n"..
														"path_walk = guard_"..it.."_walk\n"..
														"path_look = guard_"..it.."_look\n"..
														"def_state_standing = wait_na\n"..
														"on_info = {!is_obj_on_job(logic@follower_"..way_name..":3)} walker@"..way_name.."\n"..
														"on_info2 = {=distance_to_obj_on_job_le(logic@follower_"..way_name..":3)} remark@"..way_name.."\n"

						if smart.safe_restr ~= nil and xr_gulag.job_in_restrictor(smart, smart.safe_restr, way_name) then
							job1_ltx = job1_ltx .. "invulnerable = {=npc_in_zone(smart.safe_restr)} true\n"
						end

						if smart.def_restr ~= nil then
								job1_ltx = job1_ltx .."out_restr = "..smart.def_restr.."\n"
						end

						job1_ltx = job1_ltx .. "[remark@"..way_name.."]\n"..
																		"anim = wait_na\n"..
																		"target = logic@follower_"..way_name.."\n"

						if smart.def_restr ~= nil then
								job1_ltx = job1_ltx .."out_restr = "..smart.def_restr.."\n"
						end

						--' настройки фоловера для каждого гварда!!!!!!!!!!!!!!!!!
						t = {   _prior = 24,
								job_id = { section = "logic@follower_"..way_name,
											 job_type = "path_job" },
								_precondition_params = { changing_job = "logic@"..way_name },
								_precondition_function = function(se_obj, smart, precond_params, npc_info)
																return npc_info.need_job == precond_params.changing_job
														 end }
						table.insert(stalker_guard.jobs, t)

						local follower_ltx = "[logic@follower_"..way_name.."]\n"..
																"active = walker@follow_"..way_name.."\n"..

																"[walker@follow_"..way_name.."]\n"..
																"meet = meet@generic_lager\n"..
																"path_walk = guard_"..it.."_walk\n"..
																"path_look = guard_"..it.."_look\n"..
																"on_info = {=distance_to_obj_on_job_le(logic@"..way_name..":3)} remark@follower_"..way_name.."\n"

						if smart.def_restr ~= nil then
								follower_ltx = follower_ltx .."out_restr = "..smart.def_restr.."\n"
						end

						follower_ltx = follower_ltx .. "[remark@follower_"..way_name.."]\n"..
																						"anim = wait_na\n"..
																						"target = logic@"..way_name.."\n"..
																						"on_timer = 2000 | %=switch_to_desired_job%\n"

						if smart.def_restr ~= nil then
								follower_ltx = follower_ltx .."out_restr = "..smart.def_restr.."\n"
						end

						ltx = ltx..job_ltx..job1_ltx..follower_ltx
						it = it + 1
				end
				if it > 1 then table.insert(stalker_jobs.jobs, stalker_guard) end







				--'------------------------------------------------------------------------
				--'                     SNIPER
				--'------------------------------------------------------------------------
				-- Проверяем наличие снайперов в лагере.
				local stalker_def_sniper = {_prior = 30, jobs = {}}
				it = 1
				while level.patrol_path_exists(gname.."_sniper_"..it.."_walk") do
						-- Необходимо вычитать количество работ из названия точки пути.
						local way_name = gname.."_sniper_"..it.."_walk"
						local ptr = patrol(way_name)
						local wp_prop = utils.parse_waypoint_data(way_name, ptr:flags(0), ptr:name(0))
						local state = "hide"

						if wp_prop.state ~= nil then
							if wp_prop.state == "stand" then
								state = "threat"
							end
						end
						-- добавляем должность
						t = {   _prior = 30,
										job_id = { section = "logic@"..way_name,
													 job_type = "path_job" },
										_precondition_params = { way_name = way_name },
										_precondition_function =    function(se_obj, smart, precond_params)
																		if se_obj:community() == "zombied" then
																			return false
																		end

																		return combat_restrictor.accessible_job(se_obj, precond_params.way_name)
																	end
								}
						table.insert(stalker_def_sniper.jobs, t)

						-- добавляем описание должности в лтх.
						local job_ltx = "[logic@"..way_name.."]\n"..
										"active = camper@"..way_name.."\n"..

										"[camper@"..way_name.."]\n"..
										"meet = meet@generic_lager\n"..
										"path_walk = sniper_"..it.."_walk\n"..
										"path_look = sniper_"..it.."_look\n"..
										"sniper = true\n"..
										"def_state_campering ="..state.."\n"..
										"def_state_campering_fire ="..state.."_fire\n"

						if smart.def_restr ~= nil then
								job_ltx = job_ltx .."out_restr = "..smart.def_restr..","..combat_restrictor.get_job_restrictor(way_name).."\n"
						end

						ltx = ltx..job_ltx
						it = it + 1
				end
				if it > 1 then table.insert(stalker_jobs.jobs, stalker_def_sniper) end


				--'------------------------------------------------------------------------
				--'                             CAMPER
				--'------------------------------------------------------------------------
				-- Проверяем возможность стать кемпером :-)
				local stalker_def_camper = {_prior = 45, jobs = {}}
				it = 1
				while level.patrol_path_exists(gname.."_camper_"..it.."_walk") do
						-- Необходимо вычитать количество работ из названия точки пути.
						local way_name = gname.."_camper_"..it.."_walk"
						local ptr = patrol(way_name)
						local wp_prop = utils.parse_waypoint_data(way_name, ptr:flags(0), ptr:name(0))
						local state = "hide"
						local radius = 0
						if wp_prop.state ~= nil then
								if wp_prop.state == "stand" then
										state = "threat"
								end
						end
						if wp_prop.radius ~= nil then
								 radius = wp_prop.radius
						end
						-- добавляем должность
						t = {   _prior = 45,
										job_id = { section = "logic@"..way_name,
													 job_type = "path_job" },
										_precondition_params = { way_name = way_name },
										_precondition_function =    function(se_obj, smart, precond_params)
																		return combat_restrictor.accessible_job(se_obj, precond_params.way_name)
																	end
								}
						table.insert(stalker_def_camper.jobs, t)

						-- добавляем описание должности в лтх.
						local job_ltx = "[logic@"..way_name.."]\n"..
										"active = camper@"..way_name.."\n"..

										"[camper@"..way_name.."]\n"..
										"meet = meet@generic_lager\n"..
										"radius = "..tostring(radius).."\n"..
										"path_walk = camper_"..it.."_walk\n"..
										"def_state_moving = rush\n"..
										"def_state_campering ="..state.."\n"..
										"def_state_campering_fire ="..state.."_fire\n"

						if level.patrol_path_exists(gname.."_camper_"..it.."_look") then
								job_ltx = job_ltx.."path_look = camper_"..it.."_look\n"
						end

						if smart.def_restr ~= nil then
								job_ltx = job_ltx .."out_restr = "..smart.def_restr..","..combat_restrictor.get_job_restrictor(way_name).."\n"
						end

						ltx = ltx..job_ltx
						it = it + 1
				end
				if it > 1 then table.insert(stalker_jobs.jobs, stalker_def_camper) end


		table.insert(job_table, stalker_jobs)















--'------------------------------------------------------------------------
--'         РАБОТЫ МОНСТРОВ
--'------------------------------------------------------------------------
		local monster_jobs = {_precondition_is_monster = true, _prior = 50, jobs = {}}

		--'------------------------------------------------------------------------
		--'                        MOB HOME
		--'------------------------------------------------------------------------

		for it = 1,20 do
				-- Необходимо вычитать количество работ из названия точки пути.
				local name = gname.."_home_"..it
				local home_min_radius = 10
				local home_mid_radius = 20
				local home_max_radius = 70

				t = {   _prior = 40,
						job_id = { 	section = "logic@"..name,
									job_type = "point_job" }
								}
				table.insert(monster_jobs.jobs, t)

				-- добавляем описание должности в лтх.
				local job_ltx = "[logic@"..name.."]\n"..
												"active = mob_home@"..name.."\n"..

												"[mob_home@"..name.."]\n"..
												"gulag_point = true\n"..
												"home_min_radius = "..home_min_radius.."\n"..
												"home_mid_radius = "..home_mid_radius.."\n"..
												"home_max_radius = "..home_max_radius.."\n"

				if smart.def_restr ~= nil then
						job_ltx = job_ltx .."out_restr = "..smart.def_restr.."\n"
				end

				ltx = ltx..job_ltx
		end



		table.insert(job_table, monster_jobs)




--'------------------------------------------------------------------------
--'                      ЭКСКЛЮЗИВНЫЕ РАБОТЫ
--'------------------------------------------------------------------------
		local smart_ini = smart.ini
		if smart_ini:section_exist(smart_terrain.SMART_TERRAIN_SECT) then
				if smart_ini:section_exist("exclusive") then
						local n = smart_ini:line_count("exclusive")
						local id, value = "",""
						for i=0,n-1 do
								result, id, value  = smart_ini:r_line("exclusive",i,"","")
								add_exclusive_job("exclusive", id, smart_ini, job_table)
						end
				else
						local num = 1
						while smart_ini:line_exist(smart_terrain.SMART_TERRAIN_SECT, "work"..num) do
								add_exclusive_job(smart_terrain.SMART_TERRAIN_SECT, "work"..num, smart_ini, job_table)
								num = num + 1
						end
				end
		end


		return job_table
end

local job_type_by_scheme = {
							["walker"] 		= "path_job",
							["camper"] 		= "path_job",
							["patrol"] 		= "path_job",
							["animpoint"] 	= "smartcover_job",
							["smartcover"] 	= "smartcover_job",
							["remark"] 		= "point_job",
							["cover"] 		= "point_job",
							["sleeper"] 	= "path_job",
							["mob_walker"]	= "path_job",
							["mob_home"]	= "path_job",
							["mob_jump"]	= "point_job",
							["companion"]	= "point_job"
}

function add_exclusive_job(sect, work_field, smart_ini, job_table)
		local work = utils.cfg_get_string(smart_ini, sect, work_field, nil, false, "")
		if work == nil then return end
		local ini_path = "scripts\\"..work -- IX-Ray

		local fs = getFS()
		if fs:exist("$game_config$",ini_path) == nil then
				abort("there is no configuration file [%s]", ini_path)
		end
		local job_ini_file = ini_file(ini_path)
		local job_online =  utils.cfg_get_string(job_ini_file, "logic@"..work_field, "job_online", db.actor ,false , "", nil)

		-- добавляем возможность указать приоритет уникальной работы в секции логики.(по дефолту её приоритет равен 45-ти)
		local new_prior = utils.cfg_get_number(job_ini_file, "logic@"..work_field, "prior", nil , false, 45)

		-- Проверяем есть ли у работы поле suitable. Если есть, нам нужно добавить прекондишн
		local job_suitable = utils.cfg_get_string(job_ini_file, "logic@"..work_field, "suitable", smart, false, "")
		local is_monster = utils.cfg_get_bool(job_ini_file, "logic@"..work_field, "monster_job", smart, false, false)

		local active_section 	= utils.cfg_get_string(job_ini_file, "logic@"..work_field, "active", smart, false, "")
		local scheme 			= utils.get_scheme_by_section(active_section)
		local job_type 			= job_type_by_scheme[scheme]
		if scheme == "mob_home" then
			if utils.cfg_get_bool(job_ini_file, active_section, "gulag_point", smart, false, false) then
				job_type = "point_job"
			end
		end

		if job_suitable == nil then
				local t = { _prior = new_prior,
										_precondition_is_monster = is_monster,
										job_id = {  section = "logic@"..work_field,
																ini_path = ini_path,
																online = job_online,
																ini_file = job_ini_file,
																job_type = job_type }
										}
				table.insert(job_table, t)
				return
		end

		local condlist = xr_logic.parse_condlist(smart, "logic@"..work_field, "suitable", job_suitable)
		local t = { _prior = new_prior,
								_precondition_is_monster = is_monster,
								job_id = {  section = "logic@"..work_field,
														ini_path = ini_path,
														ini_file = job_ini_file,
														online = job_online,
														job_type = job_type },
								_precondition_params = { condlist = condlist },
								_precondition_function = function(se_obj, smart, precond_params)
									local result = xr_logic.pick_section_from_condlist(db.actor, se_obj, precond_params.condlist)
									if result == "false" or result == nil then
										return false
									end
									return true
								end
								}
		table.insert(job_table, t)

		-- Затычка для оффлайна, когда невозможно проверить прекондишн
		t = {   _prior = -1,
						_precondition_is_monster = is_monster,
						job_id = {  section = "logic@"..work_field,
									ini_file = job_ini_file,
									job_type = job_type }
				}

		table.insert(job_table, t)
end


--------------------------------------------------------------------------
-- Dynamic ltx
--------------------------------------------------------------------------
function load_ltx(gname)
		return ltx
end
