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

Скриптование


Svoboда

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

Уважаемые корифеи рассуждая о системе A-Live и AI НПС игры S.T.A.L.K.E.R

я пришел к следуюшим выводам поправте если неправ.

Моды разблокирующие A-Live не решают проблему хотя и вносят разнообразие в игровой

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

НПС а нпс гулаг примерно вот так лагерь новичков новички сидят у костра часов в 6

встают и покидают лагерь (гулаг) отправляясь охотится и.т.д тойсть переходят под

дефолтную либо свою логику а нагулявшись возврашаются назад к костру

если место в гулаге свободно либо в любой другой гулаг kamp

Но выяснилось что это невозможно без роспуска гулага .Спасибо Wawka и другим

ответившим на мои дилетанские вопросы

Wawka еше раз спасибо подсказал решение а именно использовать вот эту функцию из

фаила xr_conditions

-- ----------------------------------------------------------------------------------------------------

-- amk function

-- ----------------------------------------------------------------------------------------------------

function time_hours()

if level.get_time_hours() >= 5 and level.get_time_hours() <= 22 then

return true -- день

else

return false -- ночь

end

end

 

переделав ее в

 

function time_testow()

if level.get_time_hours() >= 6 and level.get_time_hours() < 8 then

return true -- отдых

else

return false --

end

end

 

создав НПС в ал спавне

 

[1]

; cse_abstract properties

section_name = stalker

name = testow

position = -209.755249,-20.444433,-153.096436

direction = 0.062321275472641,0.00316426996141672,0.0140644172206521

 

; cse_alife_trader_abstract properties

money = 5000

character_profile = amk_test_testow

 

; cse_alife_object properties

game_vertex_id = 8

distance = 2.79999995231628

level_vertex_id = 8190

object_flags = 0xffffffbf

custom_data = <<END

[logic]

cfg = scripts\testow.ltx

[smart_terrains]

none = true

[spawn]

wpn_toz34

ammo_12x76_zhekan = 4

medkit = 3

kolbasa

END

 

; cse_visual properties

visual_name = actors\soldier\soldier_bandana_3

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 1

g_group = 5

health = 1

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 1

upd:timestamp = 0x660a0d30

upd:creature_flags = 0x69

upd:position = -209.25016784668,-20.0724010467529,-141.015487670898

upd:o_model = 0

upd:o_torso = 0.00316426996141672,0.062321275472641,0

upd:g_team = 0

upd:g_squad = 1

upd:g_group = 5

 

; cse_alife_monster_abstract properties

 

upd:next_game_vertex_id = 65535

upd:prev_game_vertex_id = 65535

upd:distance_from_point = 0

upd:distance_to_point = 0

 

; cse_alife_human_abstract properties

predicate5 = 0,0,0,0,1

predicate4 = 1,1,2,1

 

; cse_ph_skeleton properties

 

upd:start_dialog =

 

; se_stalker properties

 

прописав точки пути

 

[testow_walk]

points = p0,p1,p2,p3

p0:name = wp00

p0:flags = 0x4

p0:position = -209.755249,-20.444433,-153.096436

p0:game_vertex_id = 61

p0:level_vertex_id = 43262

p0:links = p1(1)

 

p1:name = wp01

p1:flags = 0x2

p1:position = -206.181992,-20.517683,-148.460022

p1:game_vertex_id = 61

p1:level_vertex_id = 46562

p1:links = p2(1)

 

p2:name = wp02

p2:flags = 0x1

p2:position = -191.232422,-20.038328,-148.739609

p2:game_vertex_id = 46

p2:level_vertex_id = 60449

p2:links = p3(1)

 

p3:name = wp03

p3:flags = 0x1

p3:position = -182.478073,-20.137499,-143.810410

p3:game_vertex_id = 46

p3:level_vertex_id = 68212

p3:links = p0(1)

 

прописав в scripts\testow.ltx

 

[logic]

active = kamp

[kamp]

on_info = {=time_testow} walker

center_point = esc_lager_camp_center

path_walk = esc_lager_camp_center_task

soundgroup = esc_lager

meet = meet@lager

active = walker

[walker]

on_info = {!time_testow} kamp

path_walk = testow_walk

 

точки esc_lager_camp_center и esc_lager_camp_center_task тупо взяты из путей гулага esc_lager

 

в итоге наш НПС test_testow с начала игры сидит у костра с новичками а в 6 часов отправляется патрулировать (проверенно) теперь хочу заставить его свинюшек вынести ( на которых волк квест дает ) нечего меченому ерундой заниматся ну и

ночью пускай спит в подвале

к чему я все это понаписал ? просто как мне кажется на базе всего этого можно много чего сделать для улучшения S.T.A.L.K.E.R

Так как я не разбираюсь в скриптах может стоит создать отдельную тему в которой создав с нуля общего НПС тамогочи эдакого при помощи знающих товарищей и

их и наших идей попытатся написать ему достаточно сложную логику-расписание

хотябы для кордона ?

 

спасибо за внимание с уважением АККК1

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


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

Vano_Santuri

Если я правильно понимаю то создав некую универсальную логику допустим

с 23 до 5 сплю потом у костра завтракую потом делами занимаюсь наверно можно например

 

здесь

 

[logic]

active = kamp

[kamp]

on_info = {=time_testow} walker вместо walker была какая нибудь переменная или функция заставляюшая нпс рандомно выбрать какуюто схему из нескольких ?

center_point = esc_lager_camp_center

path_walk = esc_lager_camp_center_task

soundgroup = esc_lager

meet = meet@lager

active = walker

[walker]

on_info = {!time_testow} kamp

path_walk = testow_walk

 

и прикрутив ее к уже имеюшимся НПС допустим новичкам в лагере

они и респаунится будут с ней ?

 

И еше наличее в игре таких персонажей как отец диодор

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

но почемуто это не сделали

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


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

1. нафиг не нужно вернее ни на что не влияет лиш бы была цифра отличная от нуля например 0.00000001

2. Настройка логики 3ч

 

cond = список условий, которые необходимы для создания гулага {+info –info =func !func} – если условие не выполняется, то гулаг распускается, а все его подопечные начинают управляться прописанной в custom_data логикой.

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


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

cond =

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

 

В остальных случаях можно без него

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


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

Мне кажется что смена смарта гулага у волка прописанна в алл спавне а не в логике гулага.

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


Ссылка на сообщение
(изменено)

GrozoMurr

А что он по твоему должен был делать ?

 

arkawa

 

Если НПС принадлежит гулагу то в логике загрузки работ этого гулага для этого нпс нужно добавить секцию (схему поведения) с нужными координатами (не важно на какой локации) и условия переключения на эту схему

 

Если НПС использует собственную логику тоже самое только для его логики

 

Это если без редактирования алл спавн

 

Хотя вру точки путей всеравно в алл спавн править

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

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


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

arkawa

 

Помешай своего НПС в алл спавн следуюшим номером после последнего и не парься

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


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

arkawa

 

У меня при разборке алл спавн появляется несколько файлов вида

alive_101_escape.ltx

alive_102_garbage.ltx .....

way_101_escape.ltx

way_102_garbage.ltx и т.д

 

 

открываем нужный например alive_101_escape.ltx

 

и в конец вставляем свою секцию

 

[912]

; cse_abstract properties

section_name = boar_weak

name = esc_boar_weak

position = -93.2209701538086,-8.91001605987549,5.93973970413208

direction = -0.0755249038338661,-0.00769974943250418,-0.101696774363518

 

; cse_alife_object properties

game_vertex_id = 73

distance = 20.2999992370605

level_vertex_id = 170160

object_flags = 0xffffffbf

custom_data = <<END

[smart_terrains]

esc_small_home2 = true

END

 

; cse_visual properties

visual_name = monsters\mutant_boar\mutant_boar

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 0

g_group = 0

health = 1

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 1

upd:timestamp = 0

upd:creature_flags = 0

upd:position = -93.2209701538086,-8.91001605987549,5.93973970413208

upd:o_model = 0

upd:o_torso = -0.00769974943250418,-0.0755249038338661,0

upd:g_team = 0

upd:g_squad = 0

upd:g_group = 0

 

; cse_alife_monster_abstract properties

 

upd:next_game_vertex_id = 65535

upd:prev_game_vertex_id = 65535

upd:distance_from_point = 0

upd:distance_to_point = 0

 

; cse_ph_skeleton properties

 

; cse_alife_monster_base properties

 

; se_monster properties

 

 

[913] номер последней секции

; cse_abstract properties

section_name = boar_weak

name = esc_boar_weak_0003

position = -94.6008682250977,-8.94169330596924,7.42665243148804

direction = 0.100122138857841,0.000937749689910561,-0.00938144978135824

 

; cse_alife_object properties

game_vertex_id = 73

distance = 21

level_vertex_id = 168210

object_flags = 0xffffffbf

custom_data = <<END

[smart_terrains]

esc_small_home2 = true

END

 

; cse_visual properties

visual_name = monsters\mutant_boar\mutant_boar

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 0

g_group = 0

health = 1

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 1

upd:timestamp = 0

upd:creature_flags = 0

upd:position = -94.6008682250977,-8.94169330596924,7.42665243148804

upd:o_model = 0

upd:o_torso = 0.000937749689910561,0.100122138857841,0

upd:g_team = 0

upd:g_squad = 0

upd:g_group = 0

 

; cse_alife_monster_abstract properties

 

upd:next_game_vertex_id = 65535

upd:prev_game_vertex_id = 65535

upd:distance_from_point = 0

upd:distance_to_point = 0

 

; cse_ph_skeleton properties

 

; cse_alife_monster_base properties

 

; se_monster properties

 

 

[914] моя секция

; cse_abstract properties

section_name = smart_terrain

name = esc_umnik

position = -254.902908325195,-18.070499420166,-116.293899536133

direction = 0,0,0

 

; cse_alife_object properties

game_vertex_id = 8

distance = 15

level_vertex_id = 8190

object_flags = 0xffffffbe

custom_data = <<END

[smart_terrain]

type = esc_umnik

capacity = 1

groups = 0,5

END

 

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 9.99999974737875e-005

 

; cse_alife_space_restrictor properties

restrictor_type = 3

 

; se_smart_terrain properties

 

 

 

Да и может у тебя АС\ДС неправильный я пользуюсь этим

http://letitbit.net/download/1357.dfb1544a...cdc_x1.rar.html

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


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

Что то я не понимаю чего вы хотите объяснить ?

Волк персонаж гулага и использует предназначеную ему работу а так же логику соответствующую этой работе

Если персонаж не должен входить в гулаге ему пишется личная логика хоть в алл спавне хоть в отдельном файле(что значительно удобней)

 

Да и кто такой Халецкий ? :unsure:

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


Ссылка на сообщение
Таак... С назначением и содержимым файла npc_profile.xml худо-бедно я разобрался. Но вот файл spawn_sections.ltx для меня пока - темный лес. Судя по моим тестам, он нужен только при спавне скриптом, ибо через алл спавн все спавнится отлично и без него. Прав ли я? :ny_mellow:

 

Уточню файл spawn_sections.ltx используется респаунами из алл спавна

 

[2130]

; cse_abstract properties

section_name = respawn

name = gar_bandit_respawn_1

position = -255.842391967773,0.402019500732422,-16.2054500579834

direction = -0.020167512819171,3.69857480109204e-005,0.00183404912240803

 

; cse_alife_object properties

game_vertex_id = 309

distance = 9.09999942779541

level_vertex_id = 7422

object_flags = 0xffffff3e

custom_data = <<END

[respawn]

conditions = 0

respawn_section = gar_bandit_respawn_1,3,gar_bandit_respawn_2,2 имена секций из файла spawn_sections.ltx

;max_count = 12

;min_count = 5

max_spawn = 2

idle_spawn = medium

END

 

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 1

 

; cse_alife_space_restrictor properties

restrictor_type = 0

 

; se_respawn properties

 

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


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

level_prefix_lights_hanging_lamp

 

Может должен быть какой то дополнительный параметр типа

 

level_prefix_physic_object0023

 

ну и по анологии

 

level_prefix_lights_hanging_lampномер ?

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


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

может не по счету а по номеру ?

 

иначе как опредилить конкретный обьект

вот секция алл спавн

 

[3441]

; cse_abstract properties

section_name = inventory_box

name = level_prefix_inventory_box

position = 36.921272277832,-2.95341014862061e-005,130.78678894043

direction = 1.84774387435027e-006,1.76154971122742,7.45058628126571e-008

 

; cse_alife_object properties

game_vertex_id = 1308

distance = 0

level_vertex_id = 67569

object_flags = 0xffffff3b

custom_data = <<END

[logic]

cfg = scripts\treasure_inventory_box.ltx

END

story_id = 5455

 

; cse_visual properties

visual_name = physics\equipment_cache\equipment_rucksack_01_case

 

 

[3442]

; cse_abstract properties

section_name = inventory_box

name = level_prefix_inventory_box_0000

position = 10.4646062850952,-0.00433962652459741,147.542205810547

direction = 0.160875856876373,0,0

 

; cse_alife_object properties

game_vertex_id = 1308

distance = 0

level_vertex_id = 67569

object_flags = 0xffffff3b

custom_data = <<END

[logic]

cfg = scripts\treasure_inventory_box.ltx

END

story_id = 5456

 

; cse_visual properties

visual_name = physics\equipment_cache\equipment_cross_2_case

 

 

[3443]

; cse_abstract properties

section_name = inventory_box

name = level_prefix_inventory_box_0001

position = 11.5783624649048,0.215898931026459,144.25813293457

direction = -0.0601445436477661,-1.88714861869812,0.0161435827612877

 

; cse_alife_object properties

game_vertex_id = 1308

distance = 0

level_vertex_id = 67569

object_flags = 0xffffff3b

 

; cse_visual properties

visual_name = physics\equipment_cache\equipment_instrument_case_01_case

 

 

[3444]

; cse_abstract properties

section_name = inventory_box

name = level_prefix_inventory_box_0002

position = -84.5407104492188,0.158000752329826,160.422470092773

direction = 0.000516280590090901,-1.74563145637512,-0.00292284996248782

 

; cse_alife_object properties

game_vertex_id = 1308

distance = 0

level_vertex_id = 67569

object_flags = 0xffffff3b

custom_data = <<END

[logic]

cfg = scripts\treasure_inventory_box.ltx

END

story_id = 5457

 

; cse_visual properties

visual_name = physics\equipment_cache\equipment_box_02_case

 

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


Ссылка на сообщение
(изменено)

Как то так наверно можно

 

function имя_имя()

local tbl = { 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 (или 0 незнаю как правильно)}

for k,v in ipairs( tbl ) do

if level.get_time_hours() == v then

return true

end

end

return false

end

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

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


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

А

combat_ignore = combat_ignore

 

Непомагает ?

 

3.3.6. Секция combat_ignore

Если NPC в этой схеме то он, не переходит в боевой режим. В любой другой схеме:

 

[walker]

combat_ignore_cond = {+info –info =func !func} – условия для игнорирования боя (если написать always, то в данной схеме игрок будет игнорировать бой всегда, пока не перейдет в схему, где бой не игнорируется).

 

как пример часть логики Шустрого

 

;Шустрый

 

[logic@esc_lager_shustryi]

active = camper@esc_lager_prisoner

combat_ignore = combat_ignore

 

[camper@esc_lager_prisoner]

path_walk = prisoner_walk

path_look = prisoner_look

combat_ignore_cond = always

def_state_campering = prisoner

on_info = {=esc_bandits_die} remark@esc_lager_help

on_info2 = {+tutorial_wounded_give_info} sleeper4@esc_lager

meet = no_meet

danger = danger_condition@shustryi

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


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

как-то так свободовец на вышке

 

 

[camper1@mil_freedom_sniper3]

path_walk = camp_walk10

path_look = camp_look10

radius = 20

on_info = {-mil_freedom_under_attack} walker1@mil_freedom_sniper3

sniper = true

wounded = wounded_ignore@mil_sniper

 

[danger_condition@mil_freedom_sniper3]

ignore_distance = 0

ignore_types = corpse

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


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

Arhara

 

да действительно так

кто нибуть знает что означает выделенная секция

 

[2212]

; cse_abstract properties

section_name = smart_terrain

name = val_smart_bandit_3

position = -157.100021362305,1.30701446533203,-187.956161499023

direction = -0.0479185096919537,0.00413977820426226,0.0862113907933235

 

; cse_alife_object properties

game_vertex_id = 862

distance = 9.09999942779541

level_vertex_id = 8628

object_flags = 0xffffff3e

custom_data = <<END

[smart_terrain]

type = general_lager

capacity = 5

communities = dolg

cond = {+bar_darklab_document_done}

stay = medium

 

[random_task]

defend_target = 3001

END

 

; cse_shape properties

shapes = shape0

shape0:type = sphere

shape0:offset = 0,0,0

shape0:radius = 1

 

; cse_alife_space_restrictor properties

restrictor_type = 0

 

; se_smart_terrain properties

 

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


Ссылка на сообщение
(изменено)

Сталкер@Гашетка

 

Файлы character_desc_general

character_desc_zaton

character_desc_jupiter

character_desc_pripyat

character_desc_underpass

папка

gamedata\configs\gameplay

 

возможно что то в алл спавне напрямую прописанно

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

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


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

Возможно он стоит там где нет аи сетки хотя не факт

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


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

Мне кажется все из за волка

1 в алл спавне задается его стори ид

2 в алл спавне условия нахождения его в лагере

 

впрочем легко проверить попробуй подключать свои скрипты по одному :big_boss:

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


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

Такой способ может иметь неприятные последствия дело в то если петруха сразу после убийства бандитов переключится на новый смарт он может не успеть сообшить волку о уничтожении бандитов (сообщает при уничтожении и растоянии до гг 10м вроде)

 

Наверно легче просто в алл спавн изменить координаты его работы для 4 состояния гулага

 

}

table.insert(sj, t)

t = { section = "logic@esc_assault_kamp", логика

idle = 0,

prior = 10, state = {4},

online = true,

in_rest = "", out_rest = "",

predicate = function(obj_info)

return obj_info.name == "esc_novice_attacker1"

end

}

table.insert(sj, t)

end

 

 

[logic@esc_assault_kamp]

active = kamp@esc_assault_kamp

 

[kamp@esc_assault_kamp]

center_point = kamp_center1

meet = meet@friend

 

нужно найти в файле вай ескейп точку esc_assault_kamp_center1

и поменять координаты на координаты лагеря

 

 

 

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


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

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

AMK-Team.ru

×
×
  • Создать...