Перейти к содержанию

Сергей Шубин

Сталкеры
  • Публикаций

    95
  • Зарегистрирован

  • Посещение

Сообщения, опубликованные Сергей Шубин


  1. 8 часов назад, lewandowski сказал:

    c:\games\scop\gamedata\scripts\_g.script:479: bad argument #2 to 'format'

    Такие логи обычно бывают при ошибках в логике НПС.  Было бы неплохо посмотреть спавн-секции и файлы логики этих товарищей.

    8 часов назад, lewandowski сказал:

    alife():create("my_stalker",vector():set(111.75521087646,-3.9362425804138,185.2212677022),1158851,316)
    alife():create("stalker_enot",vector():set(118.23574066162,-3.9364204406738,181.56564331055),1169314,316)
    alife():create("stalker_gupi",vector():set(104.43164825439,-3.9352867603302,183.4156036377),1145772,316)
    alife():create("stalker_mucha",vector():set(116.00570678711,-3.9382157325745,181.42231750488),1165652,316)
    alife():create("stalker_varvar",vector():set(113.40515899658,-7.3491163253784,185.6340637207),1160919,316)

    И заодно.  Что скрывается под маской?

    8 часов назад, lewandowski сказал:

     spawn_world.save_variable("spawn_sniper",true)

     


  2. Добрый день. Возник вопрос. Допустим, есть смарт-террайн.  mar_b1, например.

    Этот смарт может быть заселен враждебными ГГ сквадами, в том числе, находящимися в симуляции.

    Рядом со смартом укрытие от выброса.

    Как можно проверить, есть ли на смарте враждебные НПС?


  3. Добрый вечер.  Тестирую функции передачи от игрока квестовых предметов.  В оригинальном Зове Припяти происходит трансферт предметов. Когда мы приносим Тесаку 6 банок тушенки, то они у него и остаются. Если грохнуть Тесака, то в этом можно убедиться.

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

    Для одиночного предмета работает отлично.
     

    Спойлер

     

    function esc_b3_atp_scout_medkit_out(actor, npc)
        dialogs.relocate_object_ot_actor("medkit")
    end

    function relocate_object_ot_actor(item)
        local obj = db.actor:object(item)
        if obj ~= nil then
            alife():release(alife():object(obj:id()), true)
        end
        news_manager.relocate_item(db.actor,"out",item)
    end

     

    Но если предметов два или несколько, то удаляется только один. Чтобы убрать два предмета, нужно в диалоге делать два экшена.  Нашел такую функцию.

    Спойлер


    function esc_teleport_scaner_1_out(actor, npc)
        dialogs.relocate_objects_ot_actor("teleport_scaner_1")
    end
    function relocate_objects_ot_actor(target_item)
        local victim=db.actor
        local function calc(temp,item)
            if item~=nil then
                if item:section()==target_item then
                    if alife():object(item:id()) then
                        alife():release(alife():object(item:id()),true)
                        news_manager.relocate_item(db.actor,"out",target_item)
                    end
                end
            end
        end
        victim:iterate_inventory(calc,victim)
    end

    Эта функция убирает все предметы с данным именем. Есть в рюкзаке 10 автоматов, то уберет все подчистую. Вопрос такой. Как доработать первую функцию?


    function relocate_object_ot_actor(item)
        local obj = db.actor:object(item)
        if obj ~= nil then
            alife():release(alife():object(obj:id()), true)
        end
        news_manager.relocate_item(db.actor,"out",item)
    end

    Чтобы можно было задать число удаляемых предметов.


  4. Доброе утро.  Возник вопрос.  В файле xr_statistic обрабатываются переменные статистики ГГ.  Как использовать эти значения в игровом процессе.

    1. Как составить функцию - прекондишион для диалога?  Должна возвращать true, если ГГ убил, например, 20 монстров.

    2. Как составить функцию для xr_conditions в общем виде?  Вызывается из логики рестриктора. Если ГГ выполнил, допустим, 5 квестов, то рестриктор переключается на следующую секцию.


  5. 4 минуты назад, liner сказал:

    В look вэйпоинте нужно прописать:
    "wp00|t=время_ожидания_в_милисекундах"

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


  6. Добрый день. Написал для НПС такую работу.

    Спойлер

    [esc_b1_base_5_look]
    points = p0,p1,p2,p3,p4,p5
    p0:name = wp00|a=guard|p=30|t=60000
    p0:flags = 0x1
    p0:position = -158.053024291992,-30.1030006408691,-358.866790771484
    p0:game_vertex_id = 0
    p0:level_vertex_id = 92731

    p1:name = wp00|a=guard_chasovoy|p=30|t=30000
    p1:flags = 0x1
    p1:position = -157.989273071289,-30.116340637207,-358.479614257813
    p1:game_vertex_id = 0
    p1:level_vertex_id = 92732

    p2:name = wp00|a=sit_ass|p=30|t=60000
    p2:flags = 0x1
    p2:position = -157.925903320313,-30.0917892456055,-359.192169189453
    p2:game_vertex_id = 0
    p2:level_vertex_id = 92731

    p3:name = wp01|a=binocular|p=30|t=60000
    p3:flags = 0x2
    p3:position = -152.068588256836,-30.3470077514648,-334.514709472656
    p3:game_vertex_id = 0
    p3:level_vertex_id = 100308

    p4:name = wp01|a=guard|p=30|t=60000
    p4:flags = 0x2
    p4:position = -152.18440246582,-30.3574905395508,-335.005310058594
    p4:game_vertex_id = 0
    p4:level_vertex_id = 100307

    p5:name = wp01|a=guard_chasovoy|p=30|t=30000
    p5:flags = 0x2
    p5:position = -151.915328979492,-30.3648796081543,-335.328765869141
    p5:game_vertex_id = 0
    p5:level_vertex_id = 100307


    [esc_b1_base_5_walk]
    points = p0,p1
    p0:name = wp00
    p0:flags = 0x1
    p0:position = -147.962142944336,-30.0995025634766,-358.659576416016
    p0:game_vertex_id = 0
    p0:level_vertex_id = 105118
    p0:links = p1(1)

    p1:name = wp01
    p1:flags = 0x2
    p1:position = -152.133804321289,-30.516227722168,-348.400451660156
    p1:game_vertex_id = 0
    p1:level_vertex_id = 100292
    p1:links = p0(1)

    Он её выполняет.  Можно ли как то задать время нахождения НПС на точках walk. Или это можно только сделать в логике?


  7. 16 минут назад, ForaCam сказал:

    Заменил вот модельку Сидора (ну надоела мне старая ...) и всё вроде бы хорошо , приветствие озвучивается , анимы проигрываются , вот только обчаться он никак не хочет , в смысле на курсор не реагирует совсем ... В чем может быть дело ? У конкретно Сидора какая-то своя специфика по замене ?

    А при наведении курсора на Сидоровича надпись появляется?  Типа сталкер такой то.


  8. Добрый день. Возник такой вопрос.

    У ГГ есть бустер - сканер телепортов. При использовании (активации) бустер подменяется другим предметом. Эта задача несложная.  Но по моей задумке для успешной активации бустера нужен артефакт третьего ранга в рюкзаке ГГ. Как правильно написать функцию в общем виде?  Функция должна вызываться из bind_stalker при использовании бустера.

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

    Как правильно написать функцию в общем виде?  Мне пока только последовательный перебор артефактов приходит в голову.


  9. 1 час назад, Ewgen_5057 сказал:

    Can't open section 'ammo 12x76'. Please attach [*.ini_log] file to your bug report


    Как решить?

    Игра не может найти предмет ammo 12x76.  Проверяйте файлы мода.  Где-то должен упоминаться этот "коварный" патрон.  В инвентаре НПС, в награде за квест, в тайнике, в качестве боеприпаса для оружия.  Проверяйте везде.  Когда найдете, исправьте ошибку, заменив патрон на ammo 12x76_zhekan.   И вылет прекратится.  Если лень искать, то можно добавить в игру патрон ammo 12x76.


  10. Добрый вечер. Я подключил к Зову Припяти локацию Кордон. Заселил её. Организовал симуляцию.  Сделал, как в оригинале. Чтобы сталкеры утром уходили на прогулку а вечером шли на базу.

    Спойлер


        army = {
                squad = nil,
                smart = {     base     = { prec = function(squad, target) return in_time_interval(18,8) and not xr_conditions.surge_started() and not travel_manager.check_squad_for_enemies(squad) and (target:name() == "esc_b1") end },
                            surge     = { prec = function() return xr_conditions.surge_started() end },
                            territory= { prec = function() return in_time_interval(8,18) and not xr_conditions.surge_started() end },
                            resource = { prec = function(squad, target) return in_time_interval(8,18) and not xr_conditions.surge_started() end }
                        },
                actor = nil
        },
        stalker = {
                squad = nil,
                smart = {     base     = { prec = function(squad, target) return in_time_interval(18,8) and not xr_conditions.surge_started() and not travel_manager.check_squad_for_enemies(squad) and (target:name() == "esc_b6") end },
                            surge     = { prec = function() return xr_conditions.surge_started() end },
                            territory= { prec = function() return in_time_interval(8,18) and not xr_conditions.surge_started() end },
                            resource = { prec = function(squad, target) return in_time_interval(8,18) and not xr_conditions.surge_started() end }
                        },
                actor = nil
        },
        bandit = {
                squad = {     stalker     = { prec = function(squad, target) return in_time_interval(8,21) and not xr_conditions.surge_started() and simulation_objects.sim_dist_to(squad, target) <= 150 end }
                        },
                smart = {     base     = { prec = function(squad, target) return in_time_interval(21,8) and not xr_conditions.surge_started() and not travel_manager.check_squad_for_enemies(squad) and (target:name() == "esc_b10") end },
                            territory= { prec = function() return in_time_interval(8,21) and not xr_conditions.surge_started() end },
                            surge     = { prec = function() return xr_conditions.surge_started() end }
                        },
                actor = nil
        },

    Все работает как нельзя лучше.  НПС утром дружно идут гулять, к ночи возвращаются на базы и ложатся в кроватки.

    Воодушевился успехом и решил в этом же скрипте запретить монстрам заходить на базовые смарты.

     

    Спойлер


        monster_predatory_day = {
                squad = {     monster_vegetarian            = { prec = function() return in_time_interval(6,19)    end    },
                            stalker                        = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                            bandit                        = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                            dolg                        = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                            freedom                        = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                            killer                        = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end }
                        },
                smart = {     territory= { prec = function() return  in_time_interval(6, 19) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end },
                            lair     = { prec = function() return in_time_interval(19,6) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end }
                        },
                actor = { prec = function(squad, target) return in_time_interval(6, 19) and simulation_objects.sim_dist_to(squad, target) <= 150 end }
        },
        monster_predatory_night = {
                squad = {     monster_vegetarian            = { prec = function() return in_time_interval(21,6)    end    },
                            stalker                        = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                            bandit                        = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                            dolg                        = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                            freedom                        = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end },
                            killer                        = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end }
                        },
                smart = {     territory= { prec = function() return  in_time_interval(19,6) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end },
                            lair     = { prec = function() return in_time_interval(6,19) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end }
                        },
                actor = { prec = function(squad, target) return in_time_interval(19,6) and simulation_objects.sim_dist_to(squad, target) <= 150 end }
        },

    И получил зеленое насекомое.

    Спойлер

     

    FATAL ERROR
     
    [error]Expression    : !m_error_code
    [error]Function      : raii_guard::~raii_guard
    [error]File          : ..\xrServerEntities\script_storage.cpp
    [error]Line          : 748
    [error]Description   : ...ishing\Зов Припяти\gamedata\scripts\sim_board.script:107: attempt to index global 'target' (a nil value)
     

    stack trace:

     

    107 строка -- 

                smart = {     territory= { prec = function() return  in_time_interval(6, 19) and target:name() ~= "esc_b1" and target:name() ~= "esc_b2" and target:name() ~= "esc_b4" and target:name() ~= "esc_b6" and target:name() ~= "esc_b7" end },

    Чем то движку не приглянулось указание смартов.  Вопрос - чем?  Можно ли запретить в sim_board конкретным фракциям лезть на конкретные смарты?

     


  11. 4 минуты назад, Seraph сказал:

    А в чём фокус-то?

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

    И такую же локацию с нормальным заселением. Это пока так на уровне - наметки и прикидки.  Если бы речь шла об одноразовом случае, то было бы просто. Расставил бы в СДК, то что надо. Потом убрал.  А как спавнить то, что надо в процессе игры? Возможно, несколько раз.   

    С другой стороны, разрабы мода Связь Времен два Лиманска делать не стали. У них там ГГ попадает в параллельную реальность.  Вот и возник вопрос. Даст ли СДК собрать локпак с двумя одинаковыми локами, поймет ли этот фокус движок игры. 


  12. Доброе утро.  Встал такой вопрос.

    Возможно ли собрать локационный пак с двумя одинаковыми локациями?  Например, Затон и Затон-2  Причем, Затон-2 копия Затона.  Спавн ло копиях локаций предполагается разным.

    Движок и СДК поймут такой фокус?  Или это напрасная трата времени?


  13. Добрый день.  Возник вопрос по правильной работе этих диалогов.

     

    1005552626_ss__03-21-22_07-54-19_(escape).thumb.jpg.c460450089240a1032d66395b83986b6.jpg1310659015_ss__03-21-22_07-54-26_(escape).thumb.jpg.f16284e6695b1518729db6fd6eeae522.jpgСкрипт, контролирующий диалог, в файле dialog_manager

    Спойлер

     

    local precond_table = {
                             [1] = "dialogs.npc_stalker",
                             [2] = "dialogs.npc_bandit",
                             [3] = "dialogs.npc_freedom",
                             [4] = "dialogs.npc_dolg",
                             [5] = "dialogs.npc_army",   --  моя правка
                            }

    function uni_dialog_precond(first_speaker, second_speaker)
        local npc = dialogs.who_is_npc(first_speaker, second_speaker)
        return character_community(npc) == "stalker" or
                character_community(npc) == "bandit" or
                character_community(npc) == "freedom" or
                character_community(npc) == "dolg" or
                character_community(npc) == "army"  -- моя правка
    end

     

    Добавил к традиционным для Зова Припяти пятую фракцию - военных.

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

    Спойлер

     

    FATAL ERROR
     
    [error]Expression    : !phrase_dialog->m_PhraseVector.empty()
    [error]Function      : CPhraseDialog::SayPhrase
    [error]File          : .\PhraseDialog.cpp
    [error]Line          : 146
    [error]Description   : No available phrase to say, dialog[dm_universal_dialog]
     

    stack trace:

     

    Где еще нужно прописать вояк, чтобы не вылетало?


  14. Добрый день.  Возник вопрос.  Есть идея - сделать патрульный вертолет.  Чтобы летал над локацией и атаковал монстров, бандитов и зомбированнных.  Как этого добиться и делалось ли это в каких то модах?


  15. С вертушкой разобрался.  Сначала взял не ту модель.  Теперь она красиво гудит и летает.  Встала задача - НПС должен завалить её из РПГ.  Выдал НПС РПГ.  Вертушка у него над головой висит.  И НПС палит не по вертушке, а куда то вдаль.

    Спойлер

     

    [logic]
    active = remark

    [remark]
    anim    = threat_fire
    target = story | mar_a4_heli_1
    invulnerable = true
    gather_items_enabled = false
    help_wounded_enabled = false
    corpse_detection_enabled = false
    on_info = {=dist_to_actor_ge(90)} nil %=destroy_object%
    on_info2 = {!actor_friend} %=actor_friend%

     

     


  16. Добрый вечер.  Добавил в игру вертолет.

    Спойлер

     

    [170]

    ; cse_abstract properties
    section_name = helicopter
    name = mar_a4_heli_1
    position = 710.799987792969, 120, -960.900024414063
    direction = 0, 0.785398185253143, 0
    id = 65535
    version = 128
    script_version = 12
    spawn_id = 167

    ; cse_alife_object properties
    game_vertex_id = 0
    level_vertex_id = 115941
    object_flags = 0xffffffb2
    custom_data = <<END
    [story_object]
    story_id = mar_a4_heli_1

    [logic]
    cfg = scripts\marsh\mar_a4_heli_1.ltx
    END

    ; cse_visual properties
    visual_name = dynamics\vehicles\mi24\veh_mi24_u_02

    ; cse_motion properties

    ; cse_ph_skeleton properties
    skeleton_name = idle

    ; cse_alife_helicopter properties
    cse_alife_helicopter__unk1_sz = idle
    engine_sound = vehicles\helicopter\helicopter

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

     

    [mar_a4_heli_1_start]
    points = p0
    p0:name = wp00
    p0:flags = 0x1
    p0:position = 700,120,-940.099975585938
    p0:game_vertex_id = 10320
    p0:level_vertex_id = 4294967295


    [mar_a4_heli_1_task]
    points = p0
    p0:name = wp00
    p0:flags = 0x1
    p0:position = 349.630004882813,122,-137.449996948242
    p0:game_vertex_id = 7
    p0:level_vertex_id = 363400


    [mar_a4_heli_1_way_1]
    points = p0
    p0:name = wp00
    p0:flags = 0x1
    p0:position = 650,120,-900
    p0:game_vertex_id = 10320
    p0:level_vertex_id = 4294967295


    [mar_a4_heli_1_way_2]
    points = p0
    p0:name = wp00
    p0:flags = 0x1
    p0:position = 334.690002441406,122,-96.9800033569336
    p0:game_vertex_id = 7
    p0:level_vertex_id = 352390

     

    Спойлер

     

    [logic]
    active = heli_move

    [heli_move]
    path_move = mar_a4_heli_1_start
    path_look = mar_a4_heli_1_way_1
    max_velocity = 100
    combat_ignore_cond = true
    combat_ignore_keep_when_attacked = true
    engine_sound = false
    on_info = {+mar_a4_heli_1_start_task} heli_move@1


    [heli_move@1]
    path_move = mar_a4_heli_1_task
    path_look = mar_a4_heli_1_way_2
    max_velocity = 100
    combat_ignore_cond = true
    combat_ignore_keep_when_attacked = true

     

    При заходе на локацию с вертолетом имею жука

    stack trace:
    [error][      87]    : Параметр задан неверно.

     

    В чем может быть причина?

     


  17. 16 минут назад, shadept сказал:

    Просто я не нашел ему объяснения

    Я бы написал так. Без рестрикторов.

    Спойлер

     

    function item_task_give()
        -- даем игроку квест 
        task_manager.get_task_manager():give_task("find_bus_quest")
    end

    function quest_reward()
        -- отдаем бабло игроку
        dialogs.relocate_money_to_actor(first_speaker, second_speaker, 4000)
    end

    function has_item_task(first_speaker, second_speaker)
        return db.actor:object("vodka") ~= nil
    end

     

    Спойлер

     

    Диалоги. Первый в принципе сойдет.  А второй слегка переделать.  Прекондишион в шапку диалога. Поршень убрать.

     <dialog id="plateau_debil_autobus_start">
            <dont_has_info>plateau_quest_autobus_started</dont_has_info>
            <dont_has_info>plateau_quest_autobus_smth</dont_has_info>
            <phrase_list>
            
                <!-- квест на водку начало -->
                
                <phrase id="0">
                    <text>Есть дело для меня?</text>
                    <next>1</next>
                </phrase>
                <phrase id="1">
                    <text>Конечно. Принеси мне водку.</text>
                    <next>2</next>
                    <next>3</next>
                </phrase>
                <phrase id="2">
                    <text>Ну нахер.</text>
                </phrase>
                <phrase id="3">
                    <text>Хорошо.</text>
                    <give_info>plateau_quest_autobus_started</give_info>
                    <action>plateau_quest_autobus.item_task_give</action>
                </phrase>        
            </phrase_list>
        </dialog>

     <dialog id="plateau_debil_autobus_end">
                <precondition>plateau_quest_autobus.has_item_task</precondition>
            <dont_has_info>plateau_quest_autobus_end</dont_has_info>
            <phrase_list>
                <!-- квест на автобус конец -->
                
                <phrase id="0">
                    <text>Насчет водки...</text>
                    <next>1</next>
                </phrase>
                <phrase id="1">
                    <text>Чё там?</text>
                    <next>2</next>
                    <next>4</next>
                </phrase>
                <phrase id="2">
                    <text>Вот он.</text>
                    <next>3</next>
                </phrase>
                <phrase id="3">
                    <give_info>plateau_quest_autobus_end</give_info>
                    <text>Хорошо. Вот, держи за работу.</text>
                    <action>plateau_quest_autobus.quest_reward</action>
                </phrase>
                <phrase id="4">
                    <text>Ещё занимаюсь этим делом...</text>
                </phrase>
                
            </phrase_list>
        </dialog>

     

     

    Неплохо было бы добавить функцию на передачу бутылки заказчику.


  18. В 15.02.2022 в 21:01, shadept сказал:

    Что я прописал не так?

     

    В 15.02.2022 в 21:01, shadept сказал:

    <phrase id="1">
                    <text>Чё там?</text>
                    <next>2</next>
                </phrase>
                <precondition>plateau_quest_autobus.has_item_task</precondition>
                <phrase id="2">
                    <text>Вот он.</text>
                    <next>3</next>
                </phrase>

    Прекондишион еще странно вставлен.  Между фразами.


  19. В 15.02.2022 в 21:01, shadept сказал:

    function has_item_task(first_speaker, second_speaker)
        -- проверка если у игрока есть предмет
        if db.actor:object("vodka") ~= nil then
            db.actor:give_info_portion("plateau_quest_autobus_has_item")
        end
    end

     

    В таком виде проверка не сработает.  Надо разделить.  Как то так.

    function has_item_task(first_speaker, second_speaker)
        -- проверка если у игрока есть предмет
        return db.actor:object("vodka") ~= nil
    end

    А поршень выдать отдельно.

    function has_item_task_1(first_speaker, second_speaker)
            db.actor:give_info_portion("plateau_quest_autobus_has_item")
    end

    Через рестриктор, например.

     


  20. В 15.02.2022 в 21:01, shadept сказал:

    Что я прописал не так?

    Для начала.  Во втором диалоге на передачу водки предусмотрено разветвление.  Водка есть - водки нет  А вот перехода на 4 фразу с первой нет.  

     <phrase id="0">
                    <text>Насчет водки...</text>
                    <next>1</next>
     </phrase>

    Должно быть что то вроде.

     <phrase id="0">
                    <text>Насчет водки...</text>
                    <next>1</next>
                    <next>4</next>
                </phrase>


  21. Добрый вечер.

    В Зове Припяти есть возможность скриптом задать ориентацию ГГ.  Что то вроде.

    db.actor:set_actor_direction(0.035)

     

    Для НПС есть такая возможность?  Нужно принудительно заставить НПС смотреть в заданном направлении.  Логика валкер не подходит, НПС стоит не на сетке.

     

    Что нужно прописать в скрипте?  Функция вызывается из логики этого самого НПС.


  22. В 04.09.2021 в 17:15, Emmis сказал:

    Есть ли функция или способ удалить труппы определенного сквада в нужный момент?

    Если ответ еще актуален, то можно сделать так.

    Сквад из уникальных НПС. У каждого НПС стори-ид.

    Команда на удаление    =destroy_object(story:story_id_npc_1) =destroy_object(story:story_id_npc_2) =destroy_object(story:story_id_npc_3)


  23. Добрый вечер.  В свойствах артефактов в вашем моде есть параметр.

    max_health_add                            = 0.00            ; Изменение величины здоровья        1 еденица = 0.01    (+ увеличение/- уменьшение)

     

    У артефакта af_black_angel он равен   max_health_add                            = 0.15            ;+15

    Здоровье должно вроде восстанавливаться.  Но при помещении артефакта в слот разом отнимается 15% здоровья.  Затем оно постепенно восстанавливается.  Параметр в какую сторону работает?