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

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

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

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

Ссылка на комментарий
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 11.03.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.

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

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

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

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

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

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

Войти

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

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

AMK-Team.ru

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