Все посты %s в %S - AMK Team
Перейти к контенту

[SoC] Ковыряемся в файлах


Halford

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

25 минут назад, Hind сказал:

логика собачки, и как сделать так чтобы после её смерти выполнялась цель мисии (или давался инфопоршн)

Само собой, нужна отдельная секция пёселя, к которой прикручена кастом-дата, например:

Скрытый текст

[dog_puppy]:dog_weak
custom_data             = scripts\test_dog.ltx

Скрытый текст

[smart_terrains]
none = true

[logic]
active   = mob_home
on_death = death@puppy

[mob_home]
path_home = way_point 
home_min_radius = 10
home_max_radius = 20
aggressive_home
on_signal = sig_attacked | mob_combat

[mob_combat]
on_timer = 30000 | mob_home

[death@puppy]
on_info = %+info%

 

  • Спасибо 1

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
3 часа назад, Hind сказал:

непись стоит дуб дубом

А чё ему тута делать?

3 часа назад, Hind сказал:

[remark@base]
meet = meet

Немного расшевели:

Скрытый текст

[remark]
anim     = search 
target   = actor
meet     = meet
on_timer = 10000 | remark@sit

[remark@sit]
anim     = sit 
no_move  = true
target   = nil
on_timer = 10000 | remark@sit2

[remark@sit2]
anim     = sit_ass
no_move  = true
target   = nil
on_timer = 10000 | remark@sit3

[remark@sit3]
anim     = eat_kolbasa
no_move  = true
target   = nil
on_timer = 10000 | remark@sit4

[remark@sit4]
anim     = eat_energy
no_move  = true
target   = nil
on_timer = 10000 | remark

 

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

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
17 минут назад, Hind сказал:

непися приписал в гулаг

Неплохо бы увидеть, как прописал в гулаг, ссылку в скрипте на работу и саму работу. 

  • Согласен 1

Здесь могла быть ваша реклама.

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


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

@Hind , добавляя в смарт новые работы и НПС, не забывай соответственно увеличивать вместительность территории:

capacity = 10

 

Если добавляешь соседей, делай сразу это в all.spawn, т.к. всё равно настраивать сам смарт там же. И добавляя НПС, указывай в кастом дате принадлежность к нужному смарту, а [logic] там не нужен:

[smart_terrains]
esc_csky = true

 

Скрытый текст

В скрипте добавляешь новую работу и ссылку на её логику:

bYqTpbOi.jpg?download=1&name=%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%2014-10-2022%2017:59:00.jpg

 

Ну и саму логику в .ltx файл:

0W5YvxBl.jpg?download=1&name=%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%2014-10-2022%2018:00:29.jpg

И никогда не спеши сразу добавлять с десяток новых работ за раз. Особенно с кучей точек путей. Особенно, если только начинаешь этим заниматься. Больше времени потратишь, пока найдёшь ошибку, которую, скорее всего, допустишь.

 

Изменено пользователем mole venomous
  • Полезно 1

Здесь могла быть ваша реклама.

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


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

@Hind , если нет опыта создания смартов, лучше начни с того, что создай свой первый смарт. Небольшой смарт с 2-3 несложными работами, что бы понимать, что ты делаешь. Поищи где-нибудь тутор.

Изменено пользователем mole venomous
  • Согласен 1
  • Полезно 1

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
34 минуты назад, Hind сказал:

почему неписи которые записаны в смарт террайн, идут куда хотят? Хотя работы есть. Они просто уходят

А НПС подходят под эти работы? В смартах есть установки predicate (и не только -  у тебя вообще весь смарт может не работать. Тупо из-за мелкой ошибки в файле при написании.)

Скрытый текст

        t = { section = "logic@esc_blockpost_commander_day",
            idle = 0,
            prior = 100, state = {0,2},
            position_threshold = 100,
--            online = true,
            in_rest = "", out_rest = "escape_blockpost_zone",
            predicate = function(obj_info)
                            return obj_info.name == "esc_blokpost_commander"
                        end
        }

 

Вот здесь только для объекта esc_blokpost_commander

 

34 минуты назад, Hind сказал:

ни одной кучки пацанов сидящих за телевизором или костром

Скрытый текст
34 минуты назад, Hind сказал:

t = { section = "logic@esc_blockpost_kamp1",
        idle = 0,
        prior = 5, state = {1},
        position_threshold = 100,
            online = true,
        in_rest = "", out_rest = "escape_blockpost_zone"
    }

Обрати внимание на state. Эта работа выполняется при каком то условии - время суток, выданный/не выданный инфопоршен...

 

34 минуты назад, Hind сказал:

подольше задержался на точке в smart_terrains

Это установки в all.spawn. В секциях путей для данной работы, например:

Скрытый текст

[lim_exit_city_patrol_look]
points = p0,p1,p2,p3,p4
p0:name = wp00|p=100|t=30000
p0:flags = 0x1
p0:position = 13.822473526001,-0.789200007915497,-330.906127929688
p0:game_vertex_id = 3006
p0:level_vertex_id = 33386

p1:name = wp01|p=100|t=15000
p1:flags = 0x2
p1:position = 2.4173846244812,0.944146752357483,-355.61669921875
p1:game_vertex_id = 3006
p1:level_vertex_id = 25614

p2:name = wp02|p=100|t=15000
p2:flags = 0x3
p2:position = 9.83491706848145,0.779918670654297,-296.050415039063
p2:game_vertex_id = 3009
p2:level_vertex_id = 30559

p3:name = wp03|p=100|t=15000
p3:flags = 0x4
p3:position = 30.4576187133789,0.938418030738831,-288.948120117188
p3:game_vertex_id = 3018
p3:level_vertex_id = 42572

p4:name = wp04|p=100|t=15000
p4:flags = 0x5
p4:position = 4.57630348205566,0.66511857509613,-360.93310546875
p4:game_vertex_id = 3006
p4:level_vertex_id = 27268

 

Здесь на примере четыре точки на пути НПС, в которые он последовательно смотрит с вероятностью и продолжительностью (в миллисекундах)

 

 

Изменено пользователем mole venomous
  • Спасибо 1

Здесь могла быть ваша реклама.

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


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

@Hind , я же просто пример кинул. Ты в точке пути, будь то walk или look, указываешь время и вероятность, анимацию... Смотря, чего тебе надо. Я недавно скидывал ссылку на документ с разбором логики, там это есть.

Я же говорю - практикуй. Сделай простой смарт и всё на нём проверяй. В этом деле практика нужна.

Изменено пользователем mole venomous
  • Согласен 1

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
2 минуты назад, Hind сказал:

Настройки в state поменял на {1,2,3} и всё равно

Загрузка состояний данного гулага:

Скрытый текст

    if type == "esc_blokpost" then
        return function (gulag)
            local actor = db.actor
            if not actor then
                return gulag.state
            end

            for k,v in pairs(gulag.Object) do
                if v ~= true and v:best_enemy() ~= nil then
                    gulag.alarm_start = game.get_game_time()
                    actor:give_info_portion("esc_blockpost_alarm")
                    return 2 -- тревога
                end
            end

            if gulag.alarm_start == nil or
                game.get_game_time():diffSec(gulag.alarm_start) > 300 then
                if level.get_time_hours() >= 6 and level.get_time_hours() <= 22 then
                actor:give_info_portion("esc_blockpost_normal")
                    return 0  -- день
                else
                    return 1  -- ночь
                end
            else
                return 2
            end
        end
    end

Там вообще нет состояния "3"

4 минуты назад, Hind сказал:

walk waypoint - wp00

 

4 минуты назад, Hind сказал:

не останавливаются на пост

Ну ещё бы.

  • Спасибо 1

Здесь могла быть ваша реклама.

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


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

Я правильно понял, ты создал тест-смарт? Его нужно "подключить" в ф-иях "load_states(gname, type)" и checkStalker(npc_community, gulag_type, npc_rank, se_obj), подобно остальным и в зависимости от твоих "предпочтений".

  • Согласен 1

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
12 минут назад, Hind сказал:

а как?

Скрытый текст

:42::dash2:

 

21 минуту назад, mole venomous сказал:

подобно остальным

 

На примере гулага "esc_blokpost". В скрипте конструкция 

== "esc_blokpost"

встречается трижды. 

1 - собственно, разбор работ 

Скрытый текст

    if type == "esc_blokpost" then
        t = { section = "logic@esc_blockpost_patrol1",
            idle = 0,
            prior = 8, state = {0},
            position_threshold = 100,
            online = true,
            in_rest = "", out_rest = "esc_blockpost_patrol_restrictor"
        }

...

2 - загрузка состояний

Скрытый текст

    if type == "esc_blokpost" then
        return function (gulag)
            local actor = db.actor
            if not actor then
                return gulag.state
            end

            for k,v in pairs(gulag.Object) do
                if v ~= true and v:best_enemy() ~= nil then
                    gulag.alarm_start = game.get_game_time()
                    actor:give_info_portion("esc_blockpost_alarm")
                    return 2 -- тревога
                end
            end

            if gulag.alarm_start == nil or
                game.get_game_time():diffSec(gulag.alarm_start) > 300 then
                if level.get_time_hours() >= 6 and level.get_time_hours() <= 22 then
                actor:give_info_portion("esc_blockpost_normal")
                    return 0  -- день
                else
                    return 1  -- ночь
                end
            else
                return 2
            end
        end
    end

 

Но тебе такой сложный код для практики сейчас не нужен. Возьми попроще, например:

 

    if type == "you_gulag" then 
        return function(gulag) 
            return 0 
        end 
    end 

3 - коммьюнити

Скрытый текст

    if gulag_type == "esc_blokpost" then
        return npc_community == "military"
    end

 

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

Здесь могла быть ваша реклама.

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


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

@Hind , добавляй в скрипте gulag_escape.script

В ф-ию load_job

Скрытый текст

3DnAkItx.jpg?download=1&name=%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%2016-10-2022%2020:54:03.jpg

В load_states

Скрытый текст

ThG5TgTe.jpg?download=1&name=%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%2016-10-2022%2020:55:49.jpg

В checkStalker

Скрытый текст

QwW9XPaC.jpg?download=1&name=%D0%A1%D0%BA%D1%80%D0%B8%D0%BD%D1%88%D0%BE%D1%82%2016-10-2022%2020:57:12.jpg

Если всё остальное сделано правильно, но опять не работает, значит, всё таки пора отложить на завтра  не всё правильно...

  • Согласен 1

Здесь могла быть ваша реклама.

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


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

Вот. Не поленился.

Скрытый текст

Рабочий смарт на 2 места жительства. Один дурак стоит в точке walk и смотрит в точку look. Другой дурак стоит в точке walk1, смотрит в точку look1. Через 30 секунд идёт в точку walk2 и смотрит в точку look2.  Через 30 секунд возвращается в точку walk1 и всё по новой...

В all.spawn новый смарт и парочку НПС сразу для него:

Скрытый текст

 

секции

 

[28887]

; cse_abstract properties
section_name = smart_terrain
name = esc_hind
position = 121.30312347412,-1.2308826446533,314.59301757813
direction = 0, 0, 0
id = 65535
version = 118
script_version = 6
spawn_id = 4680

; cse_alife_object properties
game_vertex_id = 236
distance = 10
level_vertex_id = 424800
object_flags = 0xffffff3e
custom_data = <<END
[smart_terrain]
type = esc_hind
capacity = 2
END

; cse_shape properties
shapes = 1
shape_0:type = sphere
shape_0:offset = 0,0,0
shape_0:radius = 5

; cse_alife_space_restrictor properties
restrictor_type = 3

; se_smart_terrain properties


[29041]

; cse_abstract properties
section_name = stalker
name = esc_hind_npc
position = 121.30312347412,-1.2308826446533,314.59301757813
direction = 0.062321275472641, 0.00316426996141672, 0.0140644172206521
id = 65535
version = 118
script_version = 6
spawn_id = 4834

; cse_alife_trader_abstract properties
money = 1000
character_profile = esc_stalker_novice

; cse_alife_object properties
game_vertex_id = 236
distance = 10
level_vertex_id = 424800
object_flags = 0xffffffbf
custom_data = <<END
[smart_terrains]
esc_hind = 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
dynamic_out_restrictions = 
dynamic_in_restrictions = 

; cse_alife_monster_abstract properties
equipment_preferences = 2, 2, 0, 1, 1
main_weapon_preferences = 0, 2, 0, 2

; cse_ph_skeleton properties

; se_stalker properties
upd:health = 1
upd:timestamp = 0x617a6b75
upd:creature_flags = 0x6b
upd:position = 121.30312347412,-1.2308826446533,314.59301757813
upd:o_torso = 0.00316426996141672, 0.062321275472641, 0
upd:g_squad = 1
upd:g_group = 5

; cse_alife_human_stalker properties
upd:start_dialog = 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

[29042]

; cse_abstract properties
section_name = stalker
name = esc_hind_npc2
position = 121.30312347412,-1.2308826446533,314.59301757813
direction = 0.062321275472641, 0.00316426996141672, 0.0140644172206521
id = 65535
version = 118
script_version = 6
spawn_id = 4834

; cse_alife_trader_abstract properties
money = 1000
character_profile = esc_stalker_novice

; cse_alife_object properties
game_vertex_id = 236
distance = 10
level_vertex_id = 424800
object_flags = 0xffffffbf
custom_data = <<END
[smart_terrains]
esc_hind = 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
dynamic_out_restrictions = 
dynamic_in_restrictions = 

; cse_alife_monster_abstract properties
equipment_preferences = 2, 2, 0, 1, 1
main_weapon_preferences = 0, 2, 0, 2

; cse_ph_skeleton properties

; se_stalker properties
upd:health = 1
upd:timestamp = 0x617a6b75
upd:creature_flags = 0x6b
upd:position = 121.30312347412,-1.2308826446533,314.59301757813
upd:o_torso = 0.00316426996141672, 0.062321275472641, 0
upd:g_squad = 1
upd:g_group = 5

; cse_alife_human_stalker properties
upd:start_dialog = 

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

 

пути

 


[esc_hind_ward1_look]
points = p0
p0:name = name00
p0:flags = 0x1
p0:position = 122.66343688965,-0.36948415637016,325.04083251953
p0:game_vertex_id = 235
p0:level_vertex_id = 426392


[esc_hind_ward1_walk]
points = p0
p0:name = name00
p0:flags = 0x1
p0:position = 123.37609863281,-1.0701833963394,306.46185302734
p0:game_vertex_id = 236
p0:level_vertex_id = 427152


[esc_hind_ward2_look]
points = p0,p1
p0:name = wp00|p=100|t=30000
p0:flags = 0x1
p0:position = 134.19830322266,-0.79889726638794,324.55578613281
p0:game_vertex_id = 235
p0:level_vertex_id = 439138

p1:name = wp01|p=100|t=30000
p1:flags = 0x2
p1:position = 119.85396575928,-0.4696381688118,326.15707397461
p1:game_vertex_id = 235
p1:level_vertex_id = 424020


[esc_hind_ward2_walk]
points = p0,p1
p0:name = wp00|p=100|t=30000
p0:flags = 0x1
p0:position = 123.41145324707,-0.66479134559631,324.32534790039
p0:game_vertex_id = 235
p0:level_vertex_id = 427177
p0:links = p1(1)

p1:name = wp01|p=100|t=30000
p1:flags = 0x2
p1:position = 129.82914733887,-0.16881239414215,334.66394042969
p1:game_vertex_id = 235
p1:level_vertex_id = 433993
p1:links = p0(1)

В gulag_escape.ltx

Скрытый текст

[logic@esc_hind_ward1]
active = walker@esc_hind_ward1

[walker@esc_hind_ward1]
path_walk = ward1_walk
path_look = ward1_look

[logic@esc_hind_ward2]
active = walker@esc_hind_ward2

[walker@esc_hind_ward2]
path_walk = ward2_walk
path_look = ward2_look

В gulag_escape.script

Скрытый текст

local t = {}

function load_job(sj, gname, type, squad, groups)
--'--------------------------------------------------------------------------
--' ESCAPE
--'--------------------------------------------------------------------------
    if type == "esc_hind" then
        t = { section = "logic@esc_hind_ward1",
            idle = 0,
            prior = 1, state = {0,1},
            position_threshold = 100,
            online = true,
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)
        t = { section = "logic@esc_hind_ward2",
            idle = 0,
            prior = 1, state = {0,1},
            position_threshold = 100,
            online = true,
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)        
    end    
     ...

end

 

function load_states(gname, type)

    if type == "esc_hind" then
        return function(gulag)
            if db.actor ~= nil then
                if ( level.get_time_hours() >= 5 and level.get_time_hours() <= 22 ) then
                    return 0  -- день
                else
                    return 1  -- ночь
                end
            else
                return gulag.state
            end
        end
    end
...

end

 

function checkStalker(npc_community, gulag_type, npc_rank, se_obj)

    if gulag_type == "esc_hind" then
        return npc_community == "stalker"
    end
...

end

   

Всё проверено и работает. Что бы не искать - смарт возле домика лиса. Группировка нейтралы и два новичка по месту прописки. 

@Hind , возьми всё как есть и на нём отрабатывай. 

 

ps Если будет вылет " any vertex ... бла бла бла " - это не ко мне. Придётся тебе попробовать новые координаты.

  • Спасибо 1

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
28 минут назад, андрей дронав сказал:

Бармен ходит во всему бару

У него персональная логика (scripts\bar_barman.ltx), которая, возможно, слетела. Загрузи более ранний сейв, изучи лог, вспоминай, что правил. 

  • Спасибо 1

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
29 минут назад, Купер сказал:
_g.

Интересно. Может быть, это такая же необходимость, как и предикаты для Скряги (если ни с кем не путаю) в ГУЛАГе - его оригинальный профиль и ИД (на самом деле, достаточно чего то одного)... 

Здесь могла быть ваша реклама.

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


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

Дополню. При этом, после компиляции олл.спавна, в который добавлены секции объектов, стоит начать НИ. Если добавлены только секции путей существующим объектам, НИ не нужна.

Изменено пользователем mole venomous
  • Согласен 1

Здесь могла быть ваша реклама.

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


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

А здесь нет ничего запрещающего или разрешающего беседу с ним.

 

Здесь могла быть ваша реклама.

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


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

@Hind , вот пример:

Скрытый текст

[smart_terrains]
none = true

[logic]
active = walker@esc_mechanik
combat_ignore = combat_ignore@esc_mechanik
on_hit = combat
;on_combat = combat
on_death = death

[walker@esc_mechanik]
path_walk = esc_mechanik_walk 
path_look = esc_mechanik_look 
meet = meet
combat_ignore_cond = {=fighting_dist_ge_20}
on_info = {+mechanik_done} walker@esc_mechanik_moving

[walker@esc_mechanik_moving]
path_walk = esc_mechanik2_walk
path_look = esc_mechanik2_look
meet = meet@no_use
combat_ignore_cond = {=fighting_dist_ge_20}
on_info = {+esc_mechanik_place} walker@esc_mechanik2

[walker@esc_mechanik2]
path_walk = esc_mechanik2_walk 
path_look = esc_mechanik2_look 
meet = meet
combat_ignore_cond = {=fighting_dist_ge(10)}

[meet]
use = true
use_wpn = true 
meet_talk_enabled = true

[meet@no_use]
use = false
use_wpn = false
abuse = false

[combat_ignore@esc_mechanik]
combat_ignore_cond = {=fighting_dist_ge_20}

[combat]
on_info = {=hit_by_actor} %+esc_mechanik_combat%

[death]
on_info = %+mechanik_umer%
 

 

  • Спасибо 1

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
Только что, Sikorskyi сказал:

Ведь эти пси-поля видно издалека

Я в ЗП ни ногой, но смею предположить, что это объекты и их надо спавнить.

Здесь могла быть ваша реклама.

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


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

Я как то выдёргивал себе всякий туман из НС+DMX, там это вполне себе объекты с партиклами. Правда, с двиглом ОГСР стали появляться с ними проблемы, но это уже другая история. 

Здесь могла быть ваша реклама.

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


Ссылка на сообщение
1 час назад, Hind сказал:

use = self

Оно будет работать, если дистанция между НПС и ГГ будет соответствовать настройкам take_dist (в оригинале этот п-тр в system.ltx). Но после завершающей фразы нужно создать условия, при которых НПС не будет больше заводить диалог, иначе он не отстанет. Например, "заткнуть" его полностью

use = {-info} self, false

Или перевести в схему, в которой meet уже не используется.

  • Спасибо 1

Здесь могла быть ваша реклама.

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


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

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