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

Ваши правки для Сталкер ЗП


Halford

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


Автор: VanoSanturi, при непосредственном участии Artos.


Версия игры: ЗП 1.6.0х
Скачать: https://yadi.sk/d/OigDn_5ztRWww
Описание: Модификация позволяет включать\выключать подсветку прицельной сетки по tab. Так же изменены прицельные сетки на более реальные аналоги.
Особенности: на любой ствол с интегрированным прицелом можно установить любую прицельную сетку исключительно правкой скрипта. На съемные прицелы только одна текстура для данного вида.

Новые сетки:
1)PSO-1-1
2)PSO-2-1
3)PSO-1 без дальномера.
4)SUSAT
5)ACOG 6x
6)GAUSS
7)G36 Scope

Адаптация:
1. Добавить в апдейт вызов скрипта.
2. Прописать секции стволов ui_текстур в таблицы. Соответсвие идет по ключу в подтаблице (1й из 1 = 1й из 2 = 1й из 3)
3. Оформить текстуры в файле configs/ui/ui_custom_msgs.xml по образцу.
4. Скопировать все файлы.

!!!Внимание: текстуры должны быть максимально легкими. Исключительно сетка,без окружения. Иначе будут фризы.

Использованные наработки:
Изначальная идея и реализация "Родная прицельная сетка ВСС с активной подсветкой" by © bArt
Механизм определения нажатия tab - Руся.
Использованы прицельные сетки: P.A.X, AMK-TEAM, bArt
В работе использовался модуль net-packet Artos (по материалам: xStream (xs_netpk), KD87 (uACDC), bardak, Red75, Sokol_jack)

Надеюсь, если будете использовать мод в своих наработках не забудете указать авторство.


Скрины


9c2b42e74c8a03a88dd8fff882cfdfe25bdba0123fd7b75c9fbafbff93d214ffcdd2b1ec5bdba0124e1969295916aa49f4a1d0a19d850eb85bdba0126441581aad8179df36332dec954df0b05bdba01294f2075432bfb887355fb25014894fb85bdba01252315f99d43a1a598c2ec4c551f3a5595bdba012288f181fc66462893fe19e000c649bf95bdba012259a642ba8ae00b5f0e2e9075722c9715bdba01235d0e6b251af8612f7d12446a8ca3c555bdba0127eccc3909825315b3d4b54fede29e2ec5bdba012 e80f254fdb81aa34f690fc2f6d3ed0395bdba012 24e72a7ed821dd4294e82454ed1c86db5bdba012


Товарищ Artos написал максимально оптимизированный скрипт - кто хочет посмотреть - просто замените содержимое, да и отпадет необходимость в дополнительном скрипте net-packet.

--Изначальная идея и реализация
--Родная прицельная сетка ВСС с активной подсветкой (c) bArt
--Довел до ума под множество винтовок VanoSanturi.
--Использованы прицельные сетки: P.A.X, AMK-TEAM, bArt
--Механизм определения нажатия tab - Руся.
--Ну вроде всех указал.
	--/ Таблица соответсвий* секция - маска без подсветки - маска с подсветкой.
local tbl_weapons = {
    --/ секции оружия       | обычные сетки (+"_light")
    --с несъемными прицелами:
    ["wpn_fn2000"]          = "crossair_fn2000",
    ["wpn_g36"]             = "crossair_g36",
    ["wpn_gauss"]           = "crossair_gauss",
    ["wpn_l85"]             = "crossair_l85",
    ["wpn_svd"]             = "crossair_pso_1M2",
    ["wpn_svu"]             = "crossair_pso_1M2",
    ["wpn_vintorez"]        = "crossair_pso_1M1",
    ["wpn_vintorez_nimble"] = "crossair_pso_1M1",
    ["wpn_svu_nimble"]      = "crossair_pso_1M2",
    ["wpn_svd_nimble"]      = "crossair_pso_1M2",
    ["wpn_g36_nimble"]      = "crossair_g36",
    ["wpn_fn2000_nimble"]   = "crossair_fn2000",
    ["pri_a17_gauss_rifle"] = "crossair_gauss",
    --со съемными прицелами:
    ["wpn_ak74"]            = "crossair_pso_1_AK",
    ["wpn_abakan"]          = "crossair_pso_1_AK",
    ["wpn_groza"]           = "crossair_pso_1_AK",
    ["wpn_groza_nimble"]    = "crossair_pso_1_AK",
    ["wpn_val"]             = "crossair_pso_1_AK",
    ["wpn_lr300"]           = "crossair_susat",
    ["wpn_sig550"]          = "crossair_susat",
    ["wpn_sig550_luckygun"] = "crossair_susat"
}
	local dev = device() --/ кешируем
local fov = 55 --/ угол обзора (по умолчанию)
local static_on = "" --/ запомненный последний cтатик
local tab      = false --/ изначально кнопка <Tab> не нажата.
local cl       = true  --/ флаг: обычная сетка или подсвеченная
local zoom     = false --/ флаг: (не)прицеливания
local flag_del = false --/ флаг на удаление сетки при увеличении обзора, чтоб не удалял все время, а только раз.
--/ основная функция
function light_scope()
    local fov_now = dev.fov
    if fov_now < fov - 1 then --/ -2 наверняка уменьшение (т.е. начало прицеливания).
        zoom = true
    elseif fov_now > fov + 1 then --/ -2 наверняка увеличение (т.е. нет прицеливания).
        zoom = false
    end
    fov = fov_now --/ запоминаем
    --/ если начато прицеливание:
    if zoom then
        --/ проверяем наличие в руках:
        local active_item = db.actor:active_item()
        if active_item then
            --/ проверка на то, что прицел активен - надет.
            if active_item:weapon_is_scope() then
                --/ ничего не делаем, если целимся из подствола.
                if not Is_GrenadeMode(active_item:id()) then
                    local hud = get_hud()
                    --/ нажата ли кнопка <Tab> (определяем по наличию "main_task")
                    tab = hud:GetCustomStatic("main_task") ~= nil
                    if tab then --/ если нажата:
                        hud:RemoveCustomStatic("main_task") --/ удаляем таск-статик
                        cl = not cl --/ инвертируем
                    end
                    --/ добавляем/заменяем статик сетки
                    change_scope(active_item:section(),hud,cl)
                    flag_del = true --/ разрешаем удаление сетки
                end
            end
        end
    else --/ после окончания прицеливания:
        if flag_del then --/ еще не удаляли?
            change_static(static_on, get_hud(), false) --/ убираем статик
            flag_del = false
        end
    end
end
--/ Добавляем/Заменяем сетку
function change_scope(wpn_section, hud, cl)
    local cs = tbl_weapons[wpn_section]
    if cs then
        if cl then --/ показываем обычную сетку
            change_static(cs.."_light", hud, false) --/ удаляем
            change_static(cs, hud, true) --/ показываем
        else --/ показываем подсвеченную сетку
            change_static(cs, hud, false) --/ удаляем
            change_static(cs.."_light", hud, true) --/ показываем
        end
    end
end
--/ Заменяем/Удаляем статик
function change_static(static, hud, add)
    if hud:GetCustomStatic(static) then
        if not add then --/удаляем
            hud:RemoveCustomStatic(static)
        end
    elseif add then --/ добавляем
        hud:AddCustomStatic(static, true)
        static_on = static --/ запоминаем статик
    end
end
--/ Активен ли подствольник
function Is_GrenadeMode(idWeapon) --/< Id weapon
    local soWeapon = idWeapon and alife():object(idWeapon) --/< server_object
    local iClassId = soWeapon and soWeapon:clsid()
    if iClassId and (iClassId == clsid.wpn_ak74_s or iClassId == clsid.wpn_groza_s) then
        local pk = net_packet() --/ берем чистый нет-пакет
        pk:w_begin(0) --/ ставим запись в начало и пишем 'начальные' 2 байта
        soWeapon:UPDATE_Write(pk) --/ пишем 'update'-параметры из объекта в нет-пакет
        pk:r_seek(2) --/ ставим чтение в начало записи (+2 байта)
        return pk:r_u8() ~= 0 --/> "grenade_mode" (вкл|откл: true|false)
    end
    return false --/>
end



  • Полезно 3

Что-то кончается, что-то начинается...

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


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

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