_g.script 3 669 Опубликовано 13 Октября 2022 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 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 13 Октября 2022 (изменено) 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 Изменено 13 Октября 2022 пользователем mole venomous Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 14 Октября 2022 17 минут назад, Hind сказал: непися приписал в гулаг Неплохо бы увидеть, как прописал в гулаг, ссылку в скрипте на работу и саму работу. 1 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 14 Октября 2022 (изменено) Скрытый текст @Hind , добавляя в смарт новые работы и НПС, не забывай соответственно увеличивать вместительность территории: capacity = 10 Если добавляешь соседей, делай сразу это в all.spawn, т.к. всё равно настраивать сам смарт там же. И добавляя НПС, указывай в кастом дате принадлежность к нужному смарту, а [logic] там не нужен: [smart_terrains] esc_csky = true Скрытый текст В скрипте добавляешь новую работу и ссылку на её логику: Ну и саму логику в .ltx файл: И никогда не спеши сразу добавлять с десяток новых работ за раз. Особенно с кучей точек путей. Особенно, если только начинаешь этим заниматься. Больше времени потратишь, пока найдёшь ошибку, которую, скорее всего, допустишь. Изменено 14 Октября 2022 пользователем mole venomous 1 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 14 Октября 2022 (изменено) @Hind , если нет опыта создания смартов, лучше начни с того, что создай свой первый смарт. Небольшой смарт с 2-3 несложными работами, что бы понимать, что ты делаешь. Поищи где-нибудь тутор. Изменено 14 Октября 2022 пользователем mole venomous 1 1 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 16 Октября 2022 (изменено) 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 Здесь на примере четыре точки на пути НПС, в которые он последовательно смотрит с вероятностью p и продолжительностью t (в миллисекундах) Изменено 16 Октября 2022 пользователем mole venomous 1 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 16 Октября 2022 (изменено) @Hind , я же просто пример кинул. Ты в точке пути, будь то walk или look, указываешь время и вероятность, анимацию... Смотря, чего тебе надо. Я недавно скидывал ссылку на документ с разбором логики, там это есть. Я же говорю - практикуй. Сделай простой смарт и всё на нём проверяй. В этом деле практика нужна. Изменено 16 Октября 2022 пользователем mole venomous 1 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 16 Октября 2022 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 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 16 Октября 2022 Я правильно понял, ты создал тест-смарт? Его нужно "подключить" в ф-иях "load_states(gname, type)" и checkStalker(npc_community, gulag_type, npc_rank, se_obj), подобно остальным и в зависимости от твоих "предпочтений". 1 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 16 Октября 2022 (изменено) 12 минут назад, Hind сказал: а как? Скрытый текст 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 Изменено 16 Октября 2022 пользователем mole venomous Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 16 Октября 2022 @Hind , добавляй в скрипте gulag_escape.script В ф-ию load_job Скрытый текст В load_states Скрытый текст В checkStalker Скрытый текст Если всё остальное сделано правильно, но опять не работает, значит, всё таки пора отложить на завтра не всё правильно... 1 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 16 Октября 2022 Вот. Не поленился. Скрытый текст Рабочий смарт на 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 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 18 Октября 2022 28 минут назад, андрей дронав сказал: Бармен ходит во всему бару У него персональная логика (scripts\bar_barman.ltx), которая, возможно, слетела. Загрузи более ранний сейв, изучи лог, вспоминай, что правил. 1 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 18 Октября 2022 29 минут назад, Купер сказал: _g. Интересно. Может быть, это такая же необходимость, как и предикаты для Скряги (если ни с кем не путаю) в ГУЛАГе - его оригинальный профиль и ИД (на самом деле, достаточно чего то одного)... Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 19 Октября 2022 (изменено) Дополню. При этом, после компиляции олл.спавна, в который добавлены секции объектов, стоит начать НИ. Если добавлены только секции путей существующим объектам, НИ не нужна. Изменено 19 Октября 2022 пользователем mole venomous 1 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 19 Октября 2022 А здесь нет ничего запрещающего или разрешающего беседу с ним. Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 19 Октября 2022 @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 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 19 Октября 2022 Только что, Sikorskyi сказал: Ведь эти пси-поля видно издалека Я в ЗП ни ногой, но смею предположить, что это объекты и их надо спавнить. Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 19 Октября 2022 Я как то выдёргивал себе всякий туман из НС+DMX, там это вполне себе объекты с партиклами. Правда, с двиглом ОГСР стали появляться с ними проблемы, но это уже другая история. Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение
_g.script 3 669 Опубликовано 20 Октября 2022 1 час назад, Hind сказал: use = self Оно будет работать, если дистанция между НПС и ГГ будет соответствовать настройкам take_dist (в оригинале этот п-тр в system.ltx). Но после завершающей фразы нужно создать условия, при которых НПС не будет больше заводить диалог, иначе он не отстанет. Например, "заткнуть" его полностью use = {-info} self, false Или перевести в схему, в которой meet уже не используется. 1 Здесь могла быть ваша реклама. Поделиться этим сообщением Ссылка на сообщение