Перейти к контенту

[SoC] Наборы работ (Set_Jobs) или скриптовые смарт-террейны и гулаги


Graff46

Рекомендуемые сообщения

Я представляю скриптовую систему организации логики поведения персонажей, которая может быть использована вместо системы смарт-террейнов и гулагов.
 


    Данную систему буду называть набором работ. В Сталкере смарты являются спавн объектами наследованными от зон (как рестрикторы), их код достаточно объёмен и сложен, плюс есть свои нюансы с расположением работ Неигровых Персонажей и настройкой всей системы. Идея сделать скритовую систему для решения задач заселения и организации логики НП возникла когда я делал схемы поведения без надобности установки точек путей. Данная фитча является кодом в чистом виде, она не использует игровые объекты, тем более спавн-объекты, это просто код который организовывает логику НП исходя из входных параметров и условий.

 

 

    Для использования системы набора работ, нужно будет создать внутри папки config\ файл с логикой и оформить файл кастом_дэйт'ы персонажа определенным образом.
    Считаем, что Вы создали текстовой файл с логикой для набора и у Вас установлены все скрипты. 
1. В файле логики (кастом_дэйта) НП пишите стандартно логику, совершенно любую, когда Вам нужно будет перевести НП в набор работ Вы должны активировать переход на схему workmen c полями name и old_section.
name - имя набора работ в который пойдет НП
old_section - имя секции в которую уйдет НП, если по каким либо условиям набор работ его не примет, НП будет в этой секции логики пока набор работ его не примет, т. е. НП в любой момент может соскочить с этой секции в набор работ. Секция эта должна быть прописана в том файле где секция worker из которой она и вызывается.
Эти секции обязательны к заполнению!
Если Вы хотите вывести НП из набора, то в файле логики набора работ, а не НП нужно сделать любой переход (on_info, on_timer и т. д.) c эффектом exit_from_setjobs(тут путь до файла с логикой, можно указать старую кастом_дэйту). 
Пример:
on_timer = 5000| %=exit_from_setjobs(scripts\logika.ltx)% 
 
Если хотите сразу отправит НП в набор, ни что не мешает сделать 
[logic]
active = workmen 
workmen - это обычная секция и работать с ней можно как с другими секциями, только не ставьте переключатели (on_info, on_timer и т. д.) в этой (workmen) схеме!
*************************************************************************************************************************************
Настройка скрипта:
В файле set_jobs_manager.script есть таблица tbl - это основная таблица работ. В неё мы добавляем  ключ - имя будущего Набора работ, а значением этого ключа будут безымянные массивы с секциями работ, сколько работ - столько и массивов, каждый массив состоит из секций.
Пример:
local tbl = {                                    -- основная таблица

ferm =	{		                   -- ferm -ключ т. е. имя набора
				{	file = "misc\\set_jobs\\one.ltx", -- путь до файла с логикой для этой работы
					section = "logic@esc", -- секция логики в файле
					prior = 2,                         -- приоритет данной работы
					state = {0,2,1},                -- состояния набора работ, при которых работа будет активна (04.08.16 не доделано)
					predicate = function(npc)   -- ф-ция условие для прёма НП в работу, если условия нет, то пишем predicate = true
										return npc:name() == "esc_blokpost_commander"
									end	
				},
				-- таких работ может быть сколь угодно.
				{
					file = "misc\\set_jobs\\one.ltx",
					section = "logic@2esc",
					prior = 1,
					state = {0,2,1},
					predicate = true	
				}
		}
 }

[logic@esc]
active   = beggar
combat_ignore	= combat_ignore

[beggar]
name_way		= w
loop				= false
extns  			= 5
anim  			= hands_up
target    		= nil

[logic@2esc]
active   = remark@vip
combat_ignore	= combat_ignore

[remark@vip]
anim  = hands_up
target    = actor
on_timer = 5000|remark@to
combat_ignore_keep_when_attacked	= true
combat_ignore_cond						= always

[remark@to]
anim  = eat_vodka
target    = actor
combat_ignore_keep_when_attacked	= true
combat_ignore_cond						= always


[combat_ignore] 



Ссылка

Изменено пользователем Kirgudu
  • Нравится 2

Поделиться этим сообщением


Ссылка на сообщение

Доработы скриптовые смарты:

НПСы в наборе не переинсталируют свою логику каждый раз переходя в онлайн из оффлайна + сохранение состояний НПС в наборе при загрузке\сохранении игры.

Ссылка в шапке и тут.

Изменено пользователем Graff46
  • Нравится 1

Поделиться этим сообщением


Ссылка на сообщение

Доработан портал "СиКВер", функционирует на вполне приемлемом уровне. Репозиторий скриптовых смартов и скриптовых схем логики разбит на два репозитория (в старом репозитории размещены ссылки на новые репозитории).

Выложены новые версии репозитория скриптовых смартов. В новой версии устранены критические ошибки и добавлены новые ф-ции для внешнего вызова, комментарии внутри. Но есть проблемы в быстродействии кода, предлагаю опытных программистов помочь в этом вопросе.

Ссылка на репозиторий.

Изменено пользователем Graff46

Поделиться этим сообщением


Ссылка на сообщение
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...