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

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


Halford

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

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

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


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

Можете подсказать, где можно посмотреть, что к чему с этим dialog manager.ltx? Не очень понятно, что там писать.

Создал новую группировку, у всех в профилях прописано #include "gameplay\character_dialogs.xml" или <actor_dialog>dm_help_wounded_medkit_dialog</actor_dialog>  - пробовал и так и так. Лечить бойцов все равно не возможно.

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


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

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

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


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

Привет всем. Я в СДК создал смарт-террейны, прописал логику  НПС в Custom_data или, у кого посложнее, во внешнем файле. Все нормально работает. Есть ли смысл мне теперь писать gulag.ltx и gulag.script и переносить всю эту логику туда? Есть ли от этого реальная польза или это просто вопрос удобства? Кому что нравится?

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


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

возможно играет на оптимизацию

Вот этот момент, в основном, и интересует. Чего-то мне страшновато за гулаг.скрипт браться. Проще и нагляднее пересобрать спавн на локации и своими глазами увидеть, как перс отрабатывает логику.

  • Согласен 1

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


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

@HellRatz, отрабатывать, конечно, будет. Вопрос в том, зачем разрабы делали через gulag.ltx и gulag.script? Если это помогает оптимизации или еще чему, я попробую тоже заморочиться, если нет - то зачем? Итак все работает.

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


Ссылка на сообщение
10 часов назад, AndreySol сказал:

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

Я как раз, наоборот, думал через гулаг раздать работы "рядовым" НПС (охрана лагеря, "сидельцы" у костра и т.д.). Ну а квестовым - персональную. Так, вроде, и разрабы делали.

Но спасибо, за совет, твоя логика понятна.

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


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

Подскажите, xxx_gulag.script и gulag_xxx.script нужно где-то регистрировать (типа system.ltx)?  Попробовал перенести работающую логику из кастом даты персонажей в эти файлы,  нпс стали вести себя, как отпущенные на волю алайфа.  Кто в лес, кто под дрова.

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


Ссылка на сообщение
16.09.2020 в 19:17, Houdini_one сказал:

файлы gulag_xxx.scripts регистрируются в xr_gulag.scripts в level_gulags

Зарегистрировал - получил вылет с руганью на g.script. Посмотрел повнимательней, увидел ниже ссылку на gulag.tasks. Добавил туда инклюд - получил вылет без лога.

Знаю, что безлоговые вылеты обычно из-за ошибок в путях нпс или диалогах. Диалоги отпадают - я их не трогал. Пути проверил - там всего 3 человека для теста.

В связи с чем вопрос: может я еще где-то что-то не прописал?

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


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

@Houdini_one, а как показать? Я с радостью - очень хочется понять проблему. Файл приложить или еще как-то

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


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

Попробовал снова переделать гулаг. 

Поставил смарт, в нем бандоса, указал в кастом дата принадлежность к этому СТ. Пока нет логики в файлах gulag.ltx и gulag.script, игра грузится нормально, нпс гуляет поблизости.

Как только добавляю логику, спустя сек 15-20  происходит вылет:

 Expression    : fatal error
Function      : CScriptEngine::lua_error
File          : E:\stalker\sources\trunk\xr_3da\xrGame\script_engine.cpp
Line          : 73
Description   : <no expression>
Arguments     : LUA error: C stack overflow 

 

Прочитал, что переполнение вызывается какой-либо функцией, которая вызывается бесконечное кол-во раз. Получается винить можно только мой gulag.script. Гляньте, кто разбирается, что там может так падлить:

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

local t = {}

function load_job(sj, gname, type, squad, groups)

 

--' Simeiz gsk lager
    if type == "simeiz_gsk_lager" then

        t = { section = "logic@simeiz_gsk_lager_kamp",
            idle = 0,
            prior = 6, state = {0,1},
            in_rest = "", out_rest = ""
        }
        table.insert(sj, t)
    end


end

 

function load_states(gname, type)

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


end

--------------------------------------------------------------------------
-- Dynamic ltx
--------------------------------------------------------------------------
function load_ltx(gname, type)
    return nil
end

function checkStalker(npc_community, gulag_type, npc_rank, se_obj)

    if gulag_type == "simeiz_gsk_lager" then
        return npc_community == "bandit"
    end

        
    return false
end

 

Кажется нашел: лишний end в функции function load_states. Так?

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


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

Скажите, а может быть у НПС несколько секций meet? По типу для walker1 - meet1, walker2 - meet2. Пару дней уже мучаюсь с этим конструктором. Не хочет НПС отрабатывать свою логику и все тут...

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


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

@Купер, ты абсолютно правильно меня понял, хотя ничего не и не было понятно :biggrin:. Об этом я спрашивал. По этой же схеме пытаюсь заставить НПС работать, но он отказывается. Поэтому и закралось сомнение. Спасибо, значит дело в другом.

  • Смешно 1

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


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

Привет всем. Как можно удалить у актора все из рук и инвентаря, кроме бинокля, болта, ПДА и фонарика? Проще говоря, ограбить. Пробовал так:

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

function clear_inventory()
    local cnt = db.actor:object_count()
    for i=0, cnt-1 do
        local item = db.actor:object(i)
        local sobj = alife():object(item:id())
    if sobj and sobj ~= db.actor:item_in_slot(4) or
        sobj ~= db.actor:item_in_slot(5) or
        sobj ~= db.actor:item_in_slot(7) or
        sobj ~= db.actor:item_in_slot(9) then
            alife():release(sobj,true)
        end
    end
end

но что-то не выходит. Просьба сильно не бить: со скриптами не особо дружу. :biggrin:

(На всякий пожарный - функцию засунул в xr_effects.script и вызывал из спейс-рестриктора)

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


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

@AndreySol, спасибо еще раз. Все заработало в таком виде:

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

function clear_inventory(actor,npc)
    db.actor:inventory_for_each(function(item)
        local section = item:section()
        if section and section ~= "wpn_binoc"
            or section ~= "device_torch"
            or section ~= "wpn_bolt"
            or section ~= "device_pda"
        then
            alife():release(alife():object(item:id()), true)
        end
        end)
end

Меченый остается в одном свитере, но с биноклем, фонарем, болтом и ПДА, если они были. Может, кому-нибудь пригодится.

  • Нравится 1
  • Полезно 1

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


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

@Купер, согласен с претензиями к эстетичности, но с моим уровнем скриптования я рад тому, что просто заработало, как я хотел :biggrin:

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


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

Привет всем. Хочу сделать, чтобы актор не смог свистнуть определенную вещь. Добавил в bind_stalker.script в функцию actor_binder:on_item_take (obj) такой код:

if obj:section() == "exo_outfit" and not
        has_alife_info("инфопорция") then
        db.actor:give_info_portion("инфопорция")
    end

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

Иначе, получится, что добыл где-то игрок экзоскелет на другой локации, а на него здесь обиделись :biggrin:. Пробовал в скрипте и в ЛЕ просто переименовать этот  exo_outfit  - тогда не работает.

Может, возможно как-то получить предмет не по section, а по story id, например, или еще как-то, чтобы игра понимала, что имеется ввиду конкретный экземпляр экзоскелета?

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


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

@naxac,  Спасибо, думаю f obj:story_id()  - оптимальный вариант

а if obj:name()  - еще лучше, Работает по названию, которое дал в ЛЕ. И не нужно лишних story id

@ru trash_, Профили НПС описаны в файлах character_desc_имя локации.xml. Чтобы лутаемый костюм соответствовал профилю, нужно его в разделе supplies указать, наверное. Там же и вооружить можешь НПС по своему усмотрению.

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

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


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

Всем привет! Есть такая функция:

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

function give_treasure()
    treasure_manager.get_treasure_manager():give_treasure("название тайника")
end

Прекрасно работает при вызове из диалога. А как можно прикрутить ее к трупу, чтобы получать тайник при обыске?

Секция on_use в логике, по видимому, не работает с трупами. Known info  - просто выдает инфопорцию, а функцию же надо еще как-то вызвать.

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


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

Как то еще, кроме того чтобы засунуть проверку в коллбэк правильного скрипта?

P.S. извиняюсь, если не точно сформулировал: как-то еще, кроме того что уже подсказал Zander_driver?

Спрашиваю, т.к. это срабатывает с некоторой задержкой, иногда когда второй раз нажимаю "обыскать". Боюсь, что первый раз может не сработать, и игрок просто пройдет мимо.

 

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


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

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