Vano_Santuri 33 Опубликовано 6 Июня 2012 Автор: 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) Надеюсь, если будете использовать мод в своих наработках не забудете указать авторство. Скрины Товарищ 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 Что-то кончается, что-то начинается... Поделиться этим сообщением Ссылка на сообщение