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

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

1 час назад, mole venomous сказал:

Возможно ли одно из четырёх значений, определяющих пар-тр hit_power в конфиге оружия, вернуть как число?

Скрытый текст
 if system_ini():line_exist(item:section(), "hit_power") then
 local Hitpower = system_ini():r_string(item:section(), "hit_power")
  if Hitpower then
   Hitpower = string.gsub(Hitpower,"[,]"," ")
   for k, v in string.gmatch(Hitpower,"[%p0-z]+") do
    --  k перебирает все значения hit_power
   end
  end	
 end

 

 

  • Спасибо 1
  • Полезно 1
Ссылка на комментарий

Именно это мне и нужно - вернуть значение параметра на текущем уровне сложности для визуального отображения ТТХ оружия.

Однако пока получилось увидеть только строку (с заменой "нежелательных" символов), а конкретное число либо, скажем, среднее арифметическое от этих четырёх, пока не выходит. 

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

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


Подарки

  • 2
  • 5
  • 3
  • 4
  • Ссылка на комментарий
    3 часа назад, mole venomous сказал:

    вернуть значение параметра на текущем уровне

    Скрытый текст
    if system_ini():line_exist(item:section(), "hit_power") then
    	local hp = system_ini():r_string(item:section(), "hit_power")
    	if hp then
    		local t = {}
    		for a in string.gfind(hp, "[%w_%-%.]+") do
    			table.insert(t, a)
    		end
    
    		local dhp = t[level.get_game_difficulty() + 1] or t[1] -- параметр hit_power в зависимости от уровня сложности игры
    
    	end
    end

     

     

    Изменено пользователем Manool
    • Спасибо 1
    • Полезно 1
    Ссылка на комментарий

    @Ghilli вроде нет. Наверное получится проверить на присест по позиции камеры относительно модели гг по оси y.

    ---

    Кто нибудь пробовал на один объект повесить два биндера? Они вдвоем будут работать или последний только?

    Изменено пользователем Graff46
    Ссылка на комментарий

    @Graff46 мысль, кстати, неплохая. Чет об этом я сразу даже не подумал. Можно попробовать. 

    На стоковом движке Зова Припяти dik_to_bind используется только для скриптов связанных с UI? (я сделал предположение на основе того, что нигде более , кроме как в UI скриптах оригинала, это не встречается) 

    Ссылка на комментарий
    06.06.2022 в 10:52, Ghilli сказал:

    На стоковом движке Зова Припяти dik_to_bind используется только для скриптов связанных с UI?

    Да

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

    Обнаружил такую недоработку в оригинале ЗП. Если скриптом воспроизводить звуки, то второй (и последующие) не воспроизведутся, пока не пройдёт предыдущий, и какая-то задержка в пару секунд... Это можно как-то пофиксить?

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

    Вопрос к знатокам скриптов, сделал систему апгрейда, только вот нижняя ветка не апгрейдится, хоть как нажимай на второй ветке иконки, будет поставлен апгрейд первой ветки, скрипт на 3 скрине

    [3 фотографии

    DEL

     

     

    Изменено пользователем Domestoz
    ссылки ВК
    Добавлено  Опричник,

    Правила форума п.2.7.1 (ссылки на ВК запрещены).

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

    https://disk.yandex.ru/i/buSDOiP3EU-O9g Как правильно прочитать параметр fire_modes из секции оружия что бы он показывал -1 или 1 а не как на скриншоте.

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

        local slot = {1,2,4}
            for n = 1,table.getn(slot) do
            local item = db.actor:item_in_slot(slot[n])
            local wpn = db.actor:active_item()
                if item ~= nil and wpn then

                local fm = sys_ini:r_string(wpn:section(), "fire_modes")
                local StatCS = hud:GetCustomStatic("fire_modes_static")
                if (StatCS == nil) and (fm ~= nil) then
                    hud:AddCustomStatic("fire_modes_static", true)
                    StatCS = hud:GetCustomStatic("fire_modes_static")
                    StatCS:wnd():SetText(fm)
                end
            else
                if item then
                    hud:RemoveCustomStatic("fire_modes_static")
                end
            end
        end
    end

     

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

    Подарки

  • Ссылка на комментарий

    @Colder, прочитанную из конфигов строку можно разбить на отдельные части функцией parse_nums, например так:

    local fm = sys_ini:r_string(wpn:section(), "fire_modes")
    local fm_t = parse_nums(fm)

    После этого в fm_t будет находиться таблица с отдельными режимами стрельбы.

     

    P.S. Только это будут просто считанные из конфигов доступные режимы, а не текущий режим стрельбы.

    • Спасибо 1

    S.T.A.L.K.E.R. CoP Objects (upd 10.04.24)


    Подарки

  • Ссылка на комментарий

    Вопрос по ОГСР движку. Пытаюсь прибавить вес ГГ. Вставляю предмет в слот "вес ГГ прибавляеться" убираю из слота "вес ГГ не возвращаеться а остаеться прежнем" как вернуть вес ГГ обратно?

    Пробывал так:

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

    function on_item_to_slot(obj)
        local st_item = db.actor:item_in_slot(9)
            if st_item and (string.find(st_item:section(), "test_use")) then

            local at = sys_ini:r_float_ex("test_use", "tool_max_weight")
            local curr_max = db.actor:get_actor_max_weight()
            local cur_max_walk = db.actor:get_actor_max_walk_weight()

            db.actor:set_actor_max_weight(curr_max + at)
            db.actor:set_actor_max_walk_weight(cur_max_walk + at)
        else --/ -
            db.actor:set_actor_max_weight(curr_max)
            db.actor:set_actor_max_walk_weight(cur_max_walk)
        end
    end

     

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

    Подарки

  • Ссылка на комментарий

    @WinCap Тоже не работает.

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

    function on_item_to_slot(obj)
        local actor_item = db.actor:item_in_slot(9)
        if actor_item and (string.find(actor_item:section(), "test_use")) then

        local at = sys_ini:r_float_ex("test_use", "tool_max_weight")
        local curr_max = db.actor:get_actor_max_weight()
        local cur_max_walk = db.actor:get_actor_max_walk_weight()

        db.actor:set_actor_max_weight(curr_max + at)
        db.actor:set_actor_max_walk_weight(cur_max_walk + at)
    else
        local curr_max1 = db.actor:get_actor_max_weight()
        local cur_max_walk1 = db.actor:get_actor_max_walk_weight()

        db.actor:set_actor_max_weight(curr_max1)
        db.actor:set_actor_max_walk_weight(cur_max_walk1)
    end
    end
     

     


    Подарки

  • Ссылка на комментарий
    3 часа назад, Colder сказал:

    db.actor:get_actor_max_weight()

    Возвращает текущее значение макс.веса. И get_actor_max_walk_weight аналогично.

    Т.е. в блоке else ты читаешь, значения которые у ГГ сейчас. И устанавливаешь их же. Естественно что ничего не меняется.

    Базовое значение куда возвращаться, в данном случае лучше из конфига прочитать, из секции actor.

    • Спасибо 1
    • Полезно 2

    Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

    Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

    AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

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

    (Платформа ОП, rx_kill_wounded.script). 

    Может есть какой-то способ сделать так, чтобы раненые враги полностью игнорировались?

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

    Вопрос по ТЧ!
    Доброго времени суток, товарищи. Я тут понемногу самостоятельно обучаюсь, решил вот сделать смарт-террейн (гулаг). Делал по аналогии уже имеющихся. 
    1. В СДК поставил смарт, прицепил к нему шейп, прописал в логике имя, всё как положено: 

    [smart_terrain]

    type = pseudo_monolit
    capacity = 3
    groups = 0, 3
    2. Поставил трех нпсов, в их кастом дату прописал принадлежность к этому гулагу: 

    [smart_terrains]

    pseudo_monolit = true
    3. Создал для них три точки walk и три точки look. (их назвал правильно - имя_смарта_имя_точки
    3ap6UJ2L537CZmMj_B21DE_5Kc2vDxZ7p_4HDkuW

     

    в файле gulag_escape.script прописал для них логику и все, что нужно:
     

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

    if type == "pseudo_monolit" then
        
        t = { section = "logic@pseudo_monolit_guard1",
            idle = 0,
            prior = 8, state = {0,2},
            position_threshold = 100,
                online = true,
            in_rest = "", out_rest = "",
            predicate = function(obj_info)
                            return obj_info.name == "esc_pseudo_monolit1"
                        end
        }


        table.insert(sj, t)
        
        t = { section = "logic@pseudo_monolit_guard2",
            idle = 0,
            prior = 8, state = {0,2},
            position_threshold = 100,
                online = true,
            in_rest = "", out_rest = "",
            predicate = function(obj_info)
                            return obj_info.name == "esc_pseudo_monolit2"
                        end
        }
        
        
            table.insert(sj, t)
        
        t = { section = "logic@pseudo_monolit_loner",
            idle = 0,
            prior = 8, state = {0,2},
            position_threshold = 100,
                online = true,
            in_rest = "", out_rest = "",
            predicate = function(obj_info)
                            return obj_info.name == "esc_pseudo_loner"
                            
                        end
        }
        
        table.insert(sj, t)
        
    end

     

    =========

     

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

     

    =======

            if gulag_type == "pseudo_monolit" then
            return npc_community == "stalker"
        end

     

     

    В файле gulag_escape.ltx прописал им их логику. 
     

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

    [logic@pseudo_monolit_guard1]
    active = walker@pseudo_monolit_guard1

    [walker@pseudo_monolit_guard1]
    path_walk = guard1_walk
    path_look = guard1_look
    def_state_standing = guard

    [logic@pseudo_monolit_guard2]
    active = walker@pseudo_monolit_guard2

    [walker@pseudo_monolit_guard2]
    path_walk = guard2_walk
    path_look = guard2_look
    def_state_standing = guard

    [logic@pseudo_monolit_loner]
    active = walker@pseudo_monolit_loner

    [walker@pseudo_monolit_loner]
    path_walk = loner_walk
    path_look = loner_look
    def_state_standing = guard

    Так вот, сама проблема в том, что эти нпс - стоят на тех местах, где были заспавнены. Их логика почему-то к ним не "цепляется". Если на них нападут (мутант, или сталкер какой) то как всё успокоится, они встанут на том месте, где остановились. Как "заставить" их "увидеть" их логику и действовать, согласно ней? Спасибо!

    God save Hatsune Miku!


    Подарки

  • Ссылка на комментарий

    @Colder смотрим сюда, и видим, что для этого параметра есть только метод get_artefact_count. set_artefact_count - отсутствует. Стало быть, одними скриптами это никак не возможно.

    Это легко поправить.
     

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

     

    CustomOutfit.h

    void set_artefact_count (u32 x) { m_artefact_count = x; }

    script_game_object.h

    void SetArtefactCount(u32 val);

    script_game_object.cpp

    void CScriptGameObject::SetArtefactCount(u32 val)
    {
    	CCustomOutfit	*outfit = smart_cast<CCustomOutfit*>(&object());
    	if (!outfit) return;
    	outfit->set_artefact_count(val);
    }

    script_game_object_scriptXXX.cpp

    		.def("set_artefact_count",			&CScriptGameObject::SetArtefactCount)

    Добавить эти строчки, скомпилировать движок, и всё.

     

     

     

    • Спасибо 1
    • Полезно 3
    • Жуть! 1

    Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

    Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

    AMD Ryzen 9 7950X (16 ядер, 5.7ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

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

    Комментарии могут оставлять только зарегистрированные пользователи

    Создать аккаунт

    Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

    Зарегистрировать новый аккаунт

    Войти

    Есть аккаунт? Войти.

    Войти
    • Недавно просматривали   0 пользователей

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

    AMK-Team.ru

    ×
    ×
    • Создать...