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

Система ALife. Логика поведения игровых объектов


Allender

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

Вроде тема подходит.

Использование функций времени ДЛЯ усложнения и разнообразия поведения НПС как в гулагах так и находящихся под собственной логикой.
Рабочий функции выглядят примерно так..

 

 

function time_test() Название функции
if level.get_time_hours() == 7 then если время равно 7 часам
return true функция возврашает true
else
return false в любое другое время возврашает false
end
end

Для использования в схемах поведения НПС(логике) функция должна быть помешенна в файл S.T.A.L.K.E.R gamedata scripts xr_conditions
при использовании функции в логике НПС
[logic@наименование_секции_логики]
active(активация секции) = kamp(имя схемы)@имя_секции
[kamp(имя схемы)@имя_секции]
on_info = {=time_test} [sleeper(имя схемы)@имя_секции] при условии что игровое время равно 7 часов ровно переключение на секцию [sleeper(имя схемы)@имя_секции]
center_point = camp_center
path_walk = camp_center_task
soundgroup = esc_lager
meet = meet@lager
[sleeper(имя схемы)@имя_секции]

 

 

В этой секции можно использовать все что угодно sleeper может быть kamp, walker и т.д (с разными путями прописанными в алл спавн).

 

Важно переключения происходят когда функция вазвращает true переключения не срабатывают если объект находится в офлайне.

 

Выше приведенный пример переключение с одной схемы на другую сработает только если объект к которому применен этот метод находится в онлайне.

 

Из этого следует что нам нужно создать такие условия при которых объект в любой момент времени сможет находится только в одной (конкретной)схеме поведения.

Спасибо IG-2007 за объяснение принципов.

 

C помощью этих функций (поместив их в xr_conditions.script).

 

 

- шаг первый ------

function time_testoww()
if level.get_time_hours() >= 6 and level.get_time_hours() <= 24 then
return true
else
return false
end
end

function time2_testoww()
if level.get_time_hours() <= 3 and level.get_time_hours() >= 0 then
return true
else
return false
end
end

-- второй

function time_testoww1()
if level.get_time_hours() >= 8 and level.get_time_hours() <= 24 then
return true
else
return false
end
end

function time2_testoww1()
if level.get_time_hours() <= 5 and level.get_time_hours() >= 0 then
return true
else
return false
end
end

-- третий

function time_testoww2()
if level.get_time_hours() >= 10 and level.get_time_hours() <= 24 then
return true
else
return false
end
end

function time2_testoww2()
if level.get_time_hours() <= 7 and level.get_time_hours() >= 0 then
return true
else
return false
end
end

-- четвертый

function time_testoww3()
if level.get_time_hours() >= 12 and level.get_time_hours() <= 24 then
return true
else
return false
end
end

function time2_testoww3()
if level.get_time_hours() <= 9 and level.get_time_hours() >= 0 then
return true
else
return false
end
end

-- пятый

function time_testoww4()
if level.get_time_hours() >= 14 and level.get_time_hours() <= 24 then
return true
else
return false
end
end

function time2_testoww4()
if level.get_time_hours() <= 11 and level.get_time_hours() >= 0 then
return true
else
return false
end
end

-- шестой

function time_testoww5()
if level.get_time_hours() >= 16 and level.get_time_hours() <= 24 then
return true
else
return false
end
end

function time2_testoww5()
if level.get_time_hours() <= 13 and level.get_time_hours() >= 0 then
return true
else
return false
end
end

-- седьмой

function time_testoww6()
if level.get_time_hours() >= 18 and level.get_time_hours() <= 24 then
return true
else
return false
end
end

function time2_testoww6()
if level.get_time_hours() <= 15 and level.get_time_hours() >= 0 then
return true
else
return false
end
end

-- восьмой

function time_testoww7()
if level.get_time_hours() >= 20 and level.get_time_hours() <= 24 then
return true
else
return false
end
end

function time2_testoww7()
if level.get_time_hours() <= 17 and level.get_time_hours() >= 0 then
return true
else
return false
end
end

-- девятый

function time_testoww8()
if level.get_time_hours() >= 22 and level.get_time_hours() <= 24 then
return true
else
return false
end
end

function time2_testoww8()
if level.get_time_hours() <= 19 and level.get_time_hours() >= 0 then
return true
else
return false
end
end

--десятый

function time_testoww9()
if level.get_time_hours() >= 0 and level.get_time_hours() <= 21 then
return true
else
return false
end
end


-- одиннадцатый

function time_testoww10()
if level.get_time_hours() >= 2 and level.get_time_hours() <= 23 then
return true
else
return false
end
end

-- двенадцатый

function time_testoww11()
if level.get_time_hours() >= 4 and level.get_time_hours() <= 24 then
return true
else
return false
end
end

function time2_testoww11()
if level.get_time_hours() <= 1 and level.get_time_hours() >= 0 then
return true
else
return false
end
end

--==========================

 


Логика охранника 
Охраняет,  ходит,  спит, сидит у костра.

Смена схем каждые 2 часа.

 

 

 

;охранник

[logic@esc_lager_zoneguard1]
active = walker@esc_lager_zoneguard1

[walker@esc_lager_zoneguard1]
on_info = {=time_testoww} walker5@esc_lager охраняет
on_info2 = {=time2_testoww} walker5@esc_lager
path_walk = guard_walk1
path_look = guard_look1
meet = meet@zoneguard_novice_lager1

[meet@zoneguard_novice_lager1]
meet_state = 10| wait@talk_hello
meet_state_wpn = 10| threat@threat_weap
victim = 10| actor
victim_wpn = 10| actor
use = true
use_wpn = true
meet_dialog = escape_lager_guard_start_dialog


[walker5@esc_lager]
on_info = {=time_testoww1} sleeper10@esc_lager
on_info2 = {=time2_testoww1} sleeper10@esc_lager ходит
path_walk = guard_walk4
meet = meet@lager

[sleeper10@esc_lager]
on_info = {=time_testoww2} kamp5@esc_lager спит
on_info2 = {=time2_testoww2} kamp5@esc_lager
path_main = mod6
meet = meet@lager

[kamp5@esc_lager]
on_info = {=time_testoww3} walker1@esc_lager_zoneguard1 сидит у костра
on_info2 = {=time2_testoww3} walker1@esc_lager_zoneguard1
center_point = camp_center
path_walk = camp_center_task
soundgroup = esc_lager
meet = meet@lager

[walker1@esc_lager_zoneguard1]
on_info = {=time_testoww4} walker6@esc_lager снова охраняет и т.д
on_info2 = {=time2_testoww4} walker6@esc_lager
path_walk = guard_walk1
path_look = guard_look1
meet = meet1@zoneguard_novice_lager1

[meet1@zoneguard_novice_lager1]
meet_state = 10| wait@talk_hello
meet_state_wpn = 10| threat@threat_weap
victim = 10| actor
victim_wpn = 10| actor
use = true
use_wpn = true
meet_dialog = escape_lager_guard_start_dialog

[walker6@esc_lager]
on_info = {=time_testoww5} sleeper11@esc_lager
on_info2 = {=time2_testoww5} sleeper11@esc_lager
path_walk = guard_walk4
meet = meet@lager

[sleeper11@esc_lager]
on_info = {=time_testoww6} kamp6@esc_lager
on_info2 = {=time2_testoww6} kamp6@esc_lager
path_main = mod6
meet = meet@lager

[kamp6@esc_lager]
on_info = {=time_testoww7} walker2@esc_lager_zoneguard1
on_info2 = {=time2_testoww7} walker2@esc_lager_zoneguard1
center_point = camp_center
path_walk = camp_center_task
soundgroup = esc_lager
meet = meet@lager

[walker2@esc_lager_zoneguard1]
on_info = {=time_testoww8} walker7@esc_lager
on_info2 = {=time2_testoww8} walker7@esc_lager
path_walk = guard_walk1
path_look = guard_look1
meet = meet2@zoneguard_novice_lager1

[meet2@zoneguard_novice_lager1]
meet_state = 10| wait@talk_hello
meet_state_wpn = 10| threat@threat_weap
victim = 10| actor
victim_wpn = 10| actor
use = true
use_wpn = true
meet_dialog = escape_lager_guard_start_dialog

[walker7@esc_lager]
on_info = {=time_testoww9} sleeper12@esc_lager
path_walk = guard_walk4
meet = meet@lager

[sleeper12@esc_lager]
on_info = {=time_testoww10} kamp7@esc_lager
path_main = mod6
meet = meet@lager

[kamp7@esc_lager]
on_info = {=time_testoww11} walker@esc_lager_zoneguard1 возврат в начало
on_info2 = {=time2_testoww11} walker@esc_lager_zoneguard1
center_point = camp_center
path_walk = camp_center_task
soundgroup = esc_lager
meet = meet@lager

 

 

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

И это всего 1 состояние гулага а может быть несколько.

При выходе в он лайн НПС окажеться именно в той секции которая соответствует времени выхода.

 

Добавлю в оригинале только 3 работы гулага охраняют, ходят, сидят у костра.

При попытках использования потребуеться добавить

sleeper в работы гулага и точку сна  mod6 в аллспавн.

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

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


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

@Dennis_Chikin,

 

стоит доработать xr_logic.script по аналогии с выполнением функций xr_effects по-умолчанию либо из явно заданного модуля. Просто перенести 1:1.

Честно не понимаю чем не устраивает xr_conditions.script или вы(ты) хочешь чтоб все функции вызываемые из схем логики располагались в одном файле ?

И привести использование этих функций к одному стандарту ?

Если так то я только за.

 

 

А вот что касается размножения time_test7, ...8, 9.6.6.666 и т.д. - аргументы прекрасно передаются, так что вполне достаточно одну time_test(), поскольку parse_infop() совершенно все равно, что разбирать.

Dennis_Chikin   я в скриптах  ноль нулевой ))  и ни когда этого не скрывал .

Но попытаюсь все таки скубатурить  то что понял из твоего(вашего)  поста.

 

Предлагается заменить все функции типа  function time_testoww9()  одной с передачей аргументов.

Вот так это видеться мне ...

Пишиться одна функция function имя_имя()  в которой  все нужные условия учтены.

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

Аргумент допустим 1time   если время то  TRUE

Аргумент допустим 2time   если время то  TRUE

Аргумент допустим 3time   если время  то  TRUE

 

Тогда при использовании в секциях логики

function time_test() тут нужный аргумент ?

 

[logic@esc_lager_zoneguard1]
active = walker@esc_lager_zoneguard1

[walker@esc_lager_zoneguard1]
on_info = {=time_test} walker5@esc_lager охраняет
on_info2 = {=time_test КУДА ВСТАВЛЯТЬ АРГУМЕНТ ДЛЯ } walker5@esc_lager
path_walk = guard_walk1
path_look = guard_look1
meet = meet@zoneguard_novice_lager1

Денис если вы сможете написать такую функцию то многие спасибо скажут когда поймут что это дает .

 

 

Как ни странно я не закончил .

Но продолжу чуть погодя )).

 

Извиняюсь за цитирование предыдущего поста но я пост писал часа 2 ))). 

 


Вот новое хотя фиг знает но 5 лет назад этого в статьях про логику не было.

 

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

 

 

 

Где то тут я видел попытки узнать население гулага.

 

НУ и вызов любой функции при юзе объекта.

 

on_use = {+info -info =func !func ~number} %+info -info =func% <название_схемы> - определяет, что произойдёт, если актор взаимодействует с объектом.

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

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


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

@Dennis_Chikin,

 

Честно не понял как мне  12 функций времени  свести в одну вызываемую из логики функцию c определенными значениями для каждой из 12  значения  true и  false .

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


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

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