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

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


Svoboда

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

Использованние функций времени в схамах логики НПС.

 

На прмере логики работ гулага escape_lager попробуем заставить нпс менять работы каждые два часа, так же добавим точки сна и соответствующие им работы с логикой + 4 работы на которых сталкеры будут спать с 21 до 6 утра в подвалах, а в остальное время гулять (уходить в рейд).

 

Потребуется AC/DC и блокнот .

Важно: В конкретный отрезок времени нпс должен находится в одной схеме поведения срого соответствующей этому отрезку.

 

Итак в нашем случае это выглядит так .

Разделим обитателей лагеря на пары по уже имеющимся работам + добавим 2 новые (сон).

Имеем 2 охранников 2 парулирующих 2 сидящих у костра добавляем 2 спящих и 4 уходяших в рейд.

Итого 12 работ .

 

файл gulag_escape.script измененная часть

--' Лагерь новичков на Escape
    if type == "esc_lager" then
-- охранники
    t = { section =  "logic@esc_lager_zoneguard1",    
        idle = 0,
        prior = 10, state = {0,1,2},
        online = true,
        in_rest = "", out_rest = "",
    }
    table.insert(sj, t)
    t = { section = "logic@esc_lager_zoneguard2",
        idle = 0,
        prior = 9, state = {0,1,2},
        online = true,
        in_rest = "", out_rest = "",
    }
    table.insert(sj, t)
-- патрулирующие
    t = { section = "logic@esc_lager_walker3",
        idle = 0,
        prior = 11, state = {0,1,2},
        online = true,
        in_rest = "", out_rest = ""
    }
    table.insert(sj, t)
    t = { section = "logic@esc_lager_walker4",
        idle = 0,
        prior = 12, state = {0,1,2},
        online = true,
        in_rest = "", out_rest = "",
    }
    table.insert(sj, t)
-- сидящие у костра
    t = { section = "logic@esc_lager_kamp1",
        idle = 0,
        prior = 16, state = {0,1,2},
        online = true,
        in_rest = "", out_rest = "",
    }
    table.insert(sj, t)

    t = { section = "logic@esc_lager_kamp2",
        idle = 0,
        prior = 15, state = {0,1,2},
        online = true,
        in_rest = "", out_rest = ""
    }
    table.insert(sj, t)
-- спящие
    t = { section = "logic@esc_lager_mods31", 
        idle = 0,
        prior = 14, state = {0,1,2},
        online = true,
        in_rest = "", out_rest = ""
    }
    table.insert(sj, t)
    
    t = { section = "logic@esc_lager_mods41",
        idle = 0,
        prior = 13, state = {0,1,2},
        online = true,
        in_rest = "", out_rest = ""
    }
    table.insert(sj, t)
-- Сони сони (спящие и гуляющие)
    t = { section = "logic@esc_lager_mods1",
        idle = 0,
        prior = 21, state = {0,1,2},
        online = true,
        in_rest = "", out_rest = ""
    }
    table.insert(sj, t)
    t = { section = "logic@esc_lager_mods2",
        idle = 0,
        prior = 22, state = {0,1,2},
        online = true,
        in_rest = "", out_rest = ""
    }
    table.insert(sj, t)
    t = { section = "logic@esc_lager_mods3",
        idle = 0,
        prior = 23, state = {0,1,2},
        online = true,
        in_rest = "", out_rest = ""
    }
    table.insert(sj, t)
    t = { section = "logic@esc_lager_mods4",
        idle = 0,
        prior = 24, state = {0,1,2},
        online = true,
        in_rest = "", out_rest = ""
    }
    table.insert(sj, t)

Удаленно название рестриктора в параметре out_rest = "" иначе вылет any vertex

В файл S.T.A.L.K.E.R. - Shadow of Chernobyl\gamedata\config\misc\gulag_escape.ltx добавляем логику для новых работ

;сони которые пойдут гулять

[logic@esc_lager_mods1]
active = sleeper@esc_lager_mods1

[sleeper@esc_lager_mods1]
path_main = mod1
meet = meet@lager

[logic@esc_lager_mods2]
active = sleeper@esc_lager_mods2

[sleeper@esc_lager_mods2]
path_main = mod2
meet = meet@lager

[logic@esc_lager_mods3]
active = sleeper@esc_lager_mods3

[sleeper@esc_lager_mods3]
path_main = mod3
meet = meet@lager

[logic@esc_lager_mods4]
active = sleeper@esc_lager_mods4

[sleeper@esc_lager_mods4]
path_main = mod4
meet = meet@lager

;места для сна в домиках 

[logic@esc_lager_mods31]
active = sleeper@esc_lager_mods31

[sleeper@esc_lager_mods31]
path_main = mod7
meet = meet@lager

[logic@esc_lager_mods41]
active = sleeper@esc_lager_mods41

[sleeper@esc_lager_mods41]
path_main = mod8
meet = meet@lager[/spoiler]

Далее, так как в оригинале всего 8 работ, в лагере добавляем в алл спавн еще 4 сталкеров

[870]
; cse_abstract properties
section_name = stalker
name = esc_lager8
position = -225.604339599609,-20.221607208252,-147.097625732422
direction = 0.0623090341687202,0.00229393295012414,0.0141186164692044

; cse_alife_trader_abstract properties
money = 5000
character_profile = esc_stalker_novice

; cse_alife_object properties
game_vertex_id = 47
distance = 3.5
level_vertex_id = 29123
object_flags = 0xffffffbf
custom_data = <<END
[smart_terrains]
esc_lager = true
END

; cse_visual properties
visual_name = actors\novice\green_stalker_2

; 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 = 0xef20e0ec
upd:creature_flags = 0xe5
upd:position = -225.604339599609,-20.221607208252,-147.097625732422
upd:o_model = 0
upd:o_torso = 0.00229393295012414,0.0623090341687202,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 = 2,2,0,1,0
predicate4 = 2,1,2,1

; cse_ph_skeleton properties

upd:start_dialog = 

; se_stalker properties

ну и далее еще 3 по анологии

добавляем точки сна

[esc_lager_mod1]
points = p0
p0:name = name00
p0:position = -207.075561523438,-22.0614719390869,-126.956001281738
p0:game_vertex_id = 58
p0:level_vertex_id = 45952

[esc_lager_mod2]
points = p0
p0:name = name00
p0:position = -214.630157470703,-22.8474712371826,-126.470748901367
p0:game_vertex_id = 59
p0:level_vertex_id = 39266

[esc_lager_mod3]
points = p0
p0:name = name00
p0:position = -210.716583251953,-22.8824710845947,-122.083511352539
p0:game_vertex_id = 59
p0:level_vertex_id = 42634

[esc_lager_mod4]
points = p0
p0:name = name00
p0:position = -210.383865356445,-22.8766937255859,-125.027153015137
p0:game_vertex_id = 59
p0:level_vertex_id = 42626

[esc_lager_mod5]
points = p0
p0:name = name00
p0:position = -238.831893920898,-20.0025863647461,-157.837829589844
p0:game_vertex_id = 47
p0:level_vertex_id = 18736

[esc_lager_mod6]
points = p0
p0:name = name00
p0:position = -218.885314941406,-19.9301738739014,-159.005096435547
p0:game_vertex_id = 47
p0:level_vertex_id = 34720

[esc_lager_mod7]
points = p0
p0:name = name00
p0:position = -204.821105957031,-19.8968200683594,-157.583831787109
p0:game_vertex_id = 53
p0:level_vertex_id = 47822

[esc_lager_mod8]
points = p0
p0:name = name00
p0:position = -185.258697509766,-19.244384765625,-130.855834960938
p0:game_vertex_id = 56
p0:level_vertex_id = 64958

ну и путь рейда

[esc_lager_reid1]
points = p0,p1,p2,p3,p4,p5
p0:name = wp00
p0:position = -8.943,-13.336,-148.609
p0:game_vertex_id = 108
p0:level_vertex_id = 267549
p0:links = p1(1)

p1:name = wp01
p1:position = -19.6868887329102,4.10310536956787,36.844128295898
p1:game_vertex_id = 82
p1:level_vertex_id = 257553
p1:links = p2(1)

p2:name = wp02
p2:position = -84.155615112305,11.521396697998,130.523866210938
p2:game_vertex_id = 84
p2:level_vertex_id = 182907
p2:links = p3(1)

p3:name = wp03
p3:position = -153.528093994141,2.2575981140137,18.302373291016
p3:game_vertex_id = 80
p3:level_vertex_id = 96857
p3:links = p4(1)

p4:name = wp04
p4:position = -192.871530517578,-2.9981938781738,-67.598228881836
p4:game_vertex_id = 68
p4:level_vertex_id = 58669
p4:links = p5(1)

p5:name = wp00
p5:position = -33.743641113281,2.4169506835938,68.040124755859
p5:game_vertex_id = 86
p5:level_vertex_id = 244276
p5:links = p0(1)

 

Итак имеем: 2 охранников, 2 патрулирующих, 2 сидящих у костра, добавляем 2 спящих. Нужно заставить их менятся, сделаем так: 2 охрранника поидут потруировать, 2 патрулиных - спать, 2 спящих - к костру, 2 сидящих у костра - охранять, ну и далее по кругу.

Логика одного охранника с коментариями и функциями из xr_conditions

функции

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() < 4 and level.get_time_hours()  >=  0 then
        return true 
    else
        return false 
    end
end

если время больше 6 и меньше 24 (24 часов в сталкере не бывает но бывает 23.59) и меньше 4, но больше 0 - перключение на walker5@esc_lager (патрулирует)

[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

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

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() < 6 and level.get_time_hours()  >=  0 then
        return true 
    else
        return false 
    end
end

если время больше или равно 8 и меньше 24 (24 часов в сталкере не бывает но бывает 23.59) и меньше 8, но больше 0 - перключение на sleeper10@esc_lager (спит)

[walker5@esc_lager]
on_info = {=time_testoww1} sleeper10@esc_lager
on_info2 = {=time2_testoww1} sleeper10@esc_lager
path_walk  = guard_walk4
meet = meet@lager

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

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() < 8 and level.get_time_hours()  >=  0 then
        return true 
    else
        return false 
    end
end

если время больше или равно 10 и меньше 24 (24 часов в сталкере не бывает но бывает 23.59) и меньше 10, но больше 0 - перключение на kamp5@esc_lager (сидит у костра )

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

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

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() < 10 and level.get_time_hours()  >=  0 then
        return true 
    else
        return false 
    end
end

если время больше или равно 12 и меньше 24 (24 часов в сталкере не бывает но бывает 23.59) и меньше 12, но больше 0 - перключение на walker1@esc_lager_zoneguard1 (охраняет)

[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 отдельная схема поведения, хоть и является копией walker@esc_lager_zoneguard1, в противном случае - дальнейшие переключения были не возможны, так как walker@esc_lager_zoneguard1 уже использует предназначеный ей отрезок времени.

 

Ну, а дальше - по аналогии, вот блок функций :

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

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() < 4 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() < 6 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() < 8 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() < 10 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() < 12 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() < 14 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() < 16 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() < 18 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() < 20 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() < 22 then
        return true 
    else
        return false 
    end
end

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

function time_testoww10()
    if level.get_time_hours() >= 2 and level.get_time_hours() < 24 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() < 2 and level.get_time_hours()  >=  0 then
        return true 
    else
        return false 
    end
end

 

Еще раз напоминаю, что все нижеприведенные схемы являются отдельными, хоть и копиями вышеприведенных

[walker[b]1[/b]@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 = meet[b]1[/b]@zoneguard_novice_lager1

[meet[b]1[/b]@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

 

Логика уходящих в рейд:

[sleeper@esc_lager_mods1]
on_info = {=akkk_sleepreids} walker@esc_lager_reids1
path_main = mod1
meet = meet@lager

[walker@esc_lager_reids1]
on_info = {=akkk_raidsleep}sleeper@esc_lager_mods1
on_info2 = {=akkk_raidsleep1}sleeper@esc_lager_mods1
path_walk  = reid1
meet = meet@lager

 

Функции:

function akkk_sleepreids()
    if level.get_time_hours() >= 6 and level.get_time_hours() < 21 then больше 6 меньше 21 гуляем
        return true  
    else
        return false 
    end
end

function akkk_raidsleep()
    if level.get_time_hours() >= 21 and level.get_time_hours() < 24 then  больше 21 меньше 24 спим
        return true  
    else
        return false 
    end
end
function akkk_raidsleep1()
    if level.get_time_hours()  >= 0  and level.get_time_hours() <  6 then   больше 0 меньше 6 спим
        return true  
    else
        return false 
    end
end

 

Да и использованние 2 функций не совсем оптимально вместо

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() < 4 and level.get_time_hours()  >=  0 then
        return true 
    else
        return false 
    end
end

достаточно 1 вида

local hours = level.get_time_hours() 
return (hours >= 6 and hours < 24) or (hours<4 and hours >= 0) 
end

 

Спасибо Erlik

 

Рабочий пример сдесь

http://narod.ru/disk/7377687001/lager.rar.html

Версия 1.0004 чистая новая игра обязательна. Смена работ каждые два часа начиная с 6, 4 сталкера в 6 уходят в рейд, а с 21 до 6 спят в подвалах.

 

Посты объеденил и немного подправил в пользу компактности правок в код никаких не вносил. Куфзук

Изменено пользователем Куфзук

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


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

Knyaz

 

Обьясните подробней что вам требуется .

Что такое Smart Cover даже не представляю . :ny_ph34r_1:

т.к занимаюсь исключительно ТЧ.

Остальные части шлак (IMXO).

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


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

=VENOM=

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

В обьщем можно нанять не любого сталкера а только того у кого в логике есть соответствуюшая возможность.

Ну чтоб работало как основные схемы .

 

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


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

strelok200

 

[logic]

active = walker

 

[walker]

path_walk = ....._...... (полное наименование точки пути wAy в ал спавне)

 

это самое простое остальные параметры будут использованны по умолчанию.

 

 

 

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


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

strelok200

 

1. Использование функции check_fighting

сама функция находится в файле \gamedata\scripts\xr_conditions.script

 

вот она

-- проверка (по story_id) того, что нашим врагом есть хотя бы кото-то один из списка

function check_fighting(actor, npc, p)

local enemy = db.storage[npc:id()].enemy

local sid

if enemy and enemy:alive() then

sid = enemy:story_id()

for i, v in pairs(p) do

--printf("_bp: %s.check_fighting(%d)", npc:name(), v)

if type(v) == 'number' and sid == v then

--printf("TRUE")

return true

end

end

end

--printf("_bp: check_fighting() = false")

return false

end

 

 

Вызывается из логики НПС

секция [combat_ignore]

 

пример логика бандитов АТП (игнорируюе Шустрого)

файл gamedata\config\misc\gulag_escape.ltx

;-------------------------------------------------------------------------------------------------

;-- ESCAPE FACTORY BANDITS

;-------------------------------------------------------------------------------------------------

[logic@esc_fabrika_bandit_walker1]

active = walker1@esc_fabrika_bandit

combat_ignore = combat_ignore

 

[walker1@esc_fabrika_bandit]

path_walk = day_walk1

path_look = day_look1

def_state_moving = raid

def_state_moving_fire = raid_fire

def_state_campering = threat

def_state_campering_fire = threat_fire

combat_ignore_cond = {=check_fighting(004)} игнорируют НПС с story_id = 4

 

 

004 это story_id Шустрого вот его секция в алл спавне

 

cse_abstract properties

section_name = stalker

name = esc_shustryi

position = 118.689079284668,-7.4942798614502,7.65357303619385

direction = 0,0,0

 

; cse_alife_trader_abstract properties

money = 5000

character_profile = esc_shustryi

 

; cse_alife_object properties

game_vertex_id = 118

distance = 8.39999961853027

level_vertex_id = 422012

object_flags = 0xffffffbf

custom_data = <<END

[smart_terrains]

esc_lager = true

END

story_id = 4

; cse_visual properties

visual_name = actors\novice\green_stalker_1

 

; cse_alife_creature_abstract properties

g_team = 0

g_squad = 0

g_group = 0

health = 2

dynamic_out_restrictions =

dynamic_in_restrictions =

 

upd:health = 2

upd:timestamp = 0x69206669

upd:creature_flags = 0x6e

upd:position = 118.689079284668,-7.4942798614502,7.65357303619385

upd:o_model = 0

upd:o_torso = 0,0,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_alife_human_abstract properties

predicate5 = 1,1,0,0,2

predicate4 = 1,1,0,0

 

; cse_ph_skeleton properties

 

upd:start_dialog =

 

; se_stalker properties

 

 

 

вот вроде и все

 

P.S Игнорируемых НПС может быть несколько пример

 

часть логики стукача на арм складах

 

 

[5281]

; cse_abstract properties

section_name = stalker

name = mil_freedom_member0001

position = -178.503997802734,-16.9659557342529,352.31005859375

direction = 0,0,0

 

; cse_alife_trader_abstract properties

money = 5000

character_profile = mil_Svoboda_stukach

 

; cse_alife_object properties

game_vertex_id = 1828

distance = 24.5

level_vertex_id = 144846

object_flags = 0xfffff7ff

custom_data = <<END

[logic]

active = walker0

on_death = death

combat_ignore = combat_ignore

 

[walker0]

path_walk = mil_freedom_courier_wait_path

path_look = mil_freedom_courier_wait_look

on_actor_dist_le = 12 | %=killactor%

on_info = {+mil_actor_in_khutor_zone} walker1

 

[walker1]

path_walk = mil_freedom_stukach_walk4

path_look = mil_freedom_stukach_look4

on_actor_dist_le_nvis = 12 | %=killactor%

on_signal = arrive | remark1

combat_ignore_cond = {=check_fighting(712:713:714:719)} false

 

[remark1]

no_rotate = true

no_move = true

anim = wait_rac

snd = mil_pavlik_to_ara

on_signal = sound_end | %+mil_courier_call% remark2

on_actor_dist_le_nvis = 12 | %=killactor%

target = mil_courier_look_point, 0

combat_ignore_cond = {=check_fighting(712:713:714:719)} false

[remark2]

anim = guard

on_info = {+mil_ara_end} kamp1

on_actor_dist_le_nvis = 12 | %=killactor%

target = mil_courier_look_point, 0

combat_ignore_cond = {=check_fighting(712:713:714:719)} false

 

[kamp1]

center_point = mil_freedom_khutor_center

meet_enable = true

meet_dialog = mil_dolg_relax_dialog

danger = danger

path_walk = mil_freedom_khutor_center_task

radius = 3

on_actor_dist_le_nvis = 12 | %=killactor%

combat_ignore_cond = {=check_fighting(712:713:714:719)} false

 

 

 

2. Смотри логику Кузнецова и солдат под мостом

 

 

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


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

@FonSwong,


 

Можно ли скриптом собрать смарты на локации и узнать их координаты?

Смотря что ты подразумеваеш под смартами.

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

Ну а если координаты работ и путей смарта то

 

6) Работы могут находиться на разных уровнях.
7) Скриптовая зона СТ теперь не используется для захвата персонажей.
8) Симуляция заключается в миграции персонажей между разными СТ.

http://stalkerin.gameru.net/wiki/index.php?title=%D0%9D%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0_%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B8._%D0%A7%D0%B0%D1%81%D1%82%D1%8C_4#3.11.3._.D0.9D.D0.BE.D0.B2.D1.8B.D0.B5_.D0.BE.D1.81.D0.BE.D0.B1.D0.B5.D0.BD.D0.BD.D0.BE.D1.81.D1.82.D0.B8_.D1.81.D0.BC.D0.B0.D1.80.D1.82.D1.82.D0.B5.D1.80.D1.80.D0.B5.D0.B9.D0.BD.D0.BE.D0.B2

 

PS. Не заблуждайтесь

Радиус смарта используеться только в СДК для визуализации.

И ни на что не влияет.

Главное что бы от нуля отличался :P .

PSS.  Распакуйте алл спавн  и измените радиус любого смарта (шейпы тойсть формы).

Типа тест хоть на 00000000000.1

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

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


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

@Карлан,

Извени забыл добавить что

 

Ну а если координаты работ и путей смарта то

Тоже можно только другим способом.

И да я не разу не скриптер.

Еще раз радиус

(размер) абсолютно не важен.

Шейп это и есть сфера или бокс.

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

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


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

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