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

Народная 2010 разработка


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

"Что у нее внутри, и как это сделать лучше". Для тех, кто уже разбирается в скриптах, конфигах, текстурах и "других страшных словах" ©, и имеет желание и время действительно делать их лучше.
См. подробности в первом посте.

Тема НЕ является ни столом заказов, ни службой техподдержки, ни справочным бюро.

Изменено пользователем Dennis_Chikin
  • Нравится 2
  • Полезно 1
Ссылка на комментарий

Shadowman,

Прописать деф в профили спавна нужным неписям - и никаких лишних проверок. :)

 

не, проще - просто функцию на СМС

[death]

on_info = %=архара_диалог. смс_сепатор_умер%

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

Еще 10 лет таких цен, зарплат и пенсий, и вместо переписи населения будет перекличка

Ссылка на комментарий
***FATAL***: Too many lmap-textures (limit: 8 textures or 32M).

Reduce pixel density (worse) or use more vertex lighting (better)

Сейчас немного поумничаю. К гигантскому труду комрадов по приведению текстур в порядок по МипМапам и альфа-каналам не имеет никакого отношения. Корень проблем в папках levels.

Итак, немного вольный перевод этого сообщения:

"Слишком много lmap-текстур (предел 8 текстур или 32 Мб (общего объема одновременно используемых))

Уменьшите (хуже -рекомендация) качество плотности пикселей или используйте больше вершин освещения (лучше -рекомендация)."

Навскидку - это на новых добавленных локациях?

Тут надо смотреть отдельно. На память не помню сколько этих лайтмапов для оригинала (около 4?), но тема серьезная, так как в новых добавленных локациях этих lmap-textures до 21 шт. по 1024 Кб.

Кстати было обсуждение _http://www.gameru.net/forum/index.php?showtopic=18751 и macron отметил что, у dx9-рендера с отражениями большие проблемы и для совместимости с r2 многое выглядит убого.

Сразу оговорюсь тему по ссылке не читал, только глянул.

Рекомендаций тоже пока нет, кроме того что многие параметры надо индивидуально пытаться подогнать через user.ltx

Там есть строки, которые ползунками не регулируются. Какие уже не помню - надо по форумам искать.

r__detail_density 0.5, например.

Что-то кажется kolmogor в рендерах подравлял для рендера dx9.

 

solvador, -- А как же быстрый "мудрый" совет при подобных бяках локи проходить на статике? Нет - сообщение движка по ограничению directX - и довольно четкое указание на причины сбоя и рекомендации исправления недочета картодела.

 

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

На динамическом освещении объектов эта надпись также появляется.

 

solvador, предыдущий оратор не привёл цитату из лога целиком, хотя там 2 строчки очень важные.

 

Как выглядит цитата целиком (полное динамическое, средние настройки):

Клиент: Создание...

Загрузка текстур...

* t-report - base: 900, 280758 K

* t-report - lmap: 10, 10241 K

***FATAL***: Too many lmap-textures (limit: 8 textures or 32M).

Reduce pixel density (worse) or use more vertex lighting (better).

 

Интересующая нас строка - это как раз репорт о том, сколько использовалось lmap-текстур. Их количество - превышает предельно допустимую нагрузку для движка. Отсюда падение fps.

 

Я не говорю, что это является прямой причиной вылета. Косвенной - да. Из-за переполнения памяти, различных стеков и иже с ними. Серьёзность этой надписи в том как раз, что карты были сделаны не по канонам, т.е., движку придётся изыскивать какие-то дополнительные ресурсы, как следствие, выше требование к железу, как следствие, ниже fps.

 

А в "Зове Припяти" несколько другой движок, там ограничение на lmap-текстуры несколько выше. Да и потом..вспомните, что весь "Зов Припяти" - это 3 огромаднейшие карты, там 8 лайтмапами на карту не справишься при всём желании.

Кстати, вопрос, может, и не в тему - а возможно ли на движке ЗП (я знаю, сейчас соль адаптируют под него) сделать карты по тому же принципу - карт немного, зато огромные?

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

От себя хочу добавить, что вылеты с логом, подобным тому, что привёл sarcus, мне доводилось видеть ещё до того, как появилась идея подправить текстуры.

 

Trapper023

Спасибо за наводку на build_details.dds. Правда в чистой солянке все эти файлы в правильном формате (DXT1 с мип-мапами). А вот в Инсталляторе граф.примочек для НС от 03.09.2010 от solvador (гугл знает) и др. текстурпаках аналогичного назначения прсутствуют build_details.dds в DXT5 и/или без мип-мапов.

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

Shadowman,

по-видимому вывод этого сообщения идет еще с древнейших времен и слабых компьютеров. Сейчас на это сообщение уже можно не обращать внимания.

Ну и кстати в подчищенном движке ЗП это сообщение убрали

* t-report - base: 1624, 771224 K

* t-report - lmap: 20, 20482 K

Сообщения нет.

Как соблюсти написано в: Reduce pixel density (worse) or use more vertex lighting (better). Компилировать карту с другими настройками. Но совершенно не нужно.

 

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

Решил сделать 4-ый апгрейд к СКАТу-15. Смысл - убрать зависимость костюма от артов.

Скрипт я дополнил, но вот не знаю правильно ли.

exo_mil_exoskeleton_dmx - это костюм заменяемый

dmx_skat15_upgrade - новый блок апгрейда

--\\*"НаноЭкзоСкелет "Скат-15М""..С Системой Жизненной Поддержки (СЖП) и С возможностью апгрейда..Меченый(Стрелок)..
local t_upd = 0
local f_1 = false
local f_1_end = false

local f_2 = false
local f_2_end = false

local f_3 = false
local f_3_end = false

local f_4 = false
local f_4_end = false

local is_pleer = false

local con_skat_1 = 1
local con_skat_2 = 1
local con_skat_3 = 1

local flag_skat_1 = false
local flag_skat_2 = false
local flag_skat_3 = false

function on_actor_update()
--    on_sub_actor_update()    
    local outfit = db.actor:item_in_slot(6)

        if not is_pleer then
    --    meceniy_outfit.is_pleer = false
            player_ogg.start_pleer_post_save()
            is_pleer = true
        end


    if not outfit or not string.find(outfit:section(),"exo_mil_exoskeleton_add") then
        return
    end

    if t_upd<time_global() then
        t_upd=time_global()+1000

        if flag_skat_1 then        
            local e_up1 = db.actor:object("exo_mil_exoskeleton_add")
            if e_up1 then
                e_up1:set_condition(con_skat_1)
get_console():execute("1")
            end
            flag_skat_1 = false
        elseif flag_skat_2 then        
            local e_up2 = db.actor:object("exo_mil_exoskeleton_addr")
            if e_up2 then
                e_up2:set_condition(con_skat_2)
get_console():execute("2")
            end
            flag_skat_2 = false
        elseif flag_skat_3 then        
            local e_up3 = db.actor:object("exo_mil_exoskeleton_addrs")
            if e_up3 then
                e_up3:set_condition(con_skat_3)
get_console():execute("3")
            end
            flag_skat_3 = false
        end

        system_outfit()
        if outfit:section() == "exo_mil_exoskeleton_addr" then
            new_system_rad()
        elseif outfit:section() == "exo_mil_exoskeleton_addrs" then
            new_system_rad()
            new_system_power()

            new_anti_dot()
        end
    end

end



function on_sub_actor_update()
    update_spawn()
end

function update_spawn()
            alife():create("doc_1",vector():set(-198.597,4.488,168.971),25633,1363)
            alife():create("art_acumm",vector():set(-33.133,3.548,-64.111),198,1960)
            alife():create("doc_8",vector():set(-33.133,3.548,-64.111),198,1960)
            alife():create("doc_10",vector():set(-89.387,-2.457,-25.271),19105,2875)
            alife():create("art_acumm",vector():set(-89.387,-2.457,-25.271),19105,2875)
            spawner()
end


function on_item_drop(obj)
    if obj:section() == "doc_1" then
        doc_use()
    elseif obj:section() == "doc_8" then
        doc_use_2()
    elseif obj:section() == "doc_10" then
        doc_use_3()
    end
end

function doc_use()
    local e1 = db.actor:object("exo_mil_exoskeleton")
    if e1 then
        con_skat_1 = e1:condition()
        alife():release(alife():object(e1:id()))
        amk.spawn_item_in_inv("exo_mil_exoskeleton_add")
        flag_skat_1 = true
        news_manager.send_tip(db.actor, "Апгрейд Закончен.", nil, nil, 10000)
        alife():create("art_acumm",vector():set(-89.387,-2.457,-25.271),19105,2875)
        update_spawn_2()
    else
        amk.spawn_item_in_inv("doc_1")
    end
end

function update_spawn_2()
    alife():create("art_acumm",vector():set(-89.387,-2.457,-25.271),19105,2875)
end

function doc_use_2()
    local e2 = db.actor:object("exo_mil_exoskeleton_add")
    if e2 then
        con_skat_2 = e2:condition()
        alife():release(alife():object(e2:id()))
        amk.spawn_item_in_inv("exo_mil_exoskeleton_addr")
        flag_skat_2 = true
        news_manager.send_tip(db.actor, "Апгрейд Закончен.", nil, nil, 10000)
    else
        amk.spawn_item_in_inv("doc_8")
    end
end


function doc_use_3()
    local e3 = db.actor:object("exo_mil_exoskeleton_addr")
    if e3 then
        con_skat_3 = e3:condition()
        alife():release(alife():object(e3:id()))
        amk.spawn_item_in_inv("exo_mil_exoskeleton_addrs")
        flag_skat_3 = true
        news_manager.send_tip(db.actor, "Апгрейд Закончен.", nil, nil, 10000)
    else
        amk.spawn_item_in_inv("doc_10")
    end
end

function spawner()
    alife():create("art_acumm",vector():set(-89.387,-2.457,-25.271),19105,2875)
end

function system_outfit()
    local act = db.actor
    if (act.health > 0.5) and (act:get_bleeding() <= 0.3) then 
        f_1 = false        f_1_end = false
        return 
    end
    if (act.health <= 0.5) and (not f_1) then    
        news_manager.send_tip(act, "%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Ваше Состояние Здоровья ниже 50% от Обычного Состояния, если у вас есть мед. препараты, то Система Жизненой Поддержки произведет лечение".."\n", nil, nil, 30000)
    elseif (act:get_bleeding() > 0.3) and (not f_1) then    
        news_manager.send_tip(act, "%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."У вас сильное кровотечение, если у вас есть мед. препараты, то Система Жизненой Поддержки произведет лечение".."\n", nil, nil, 30000)
    end
    f_1 = true
    if (act.health <= 0.5) and act:object("medkit") then
        act:eat(act:object("medkit"))
        f_1 = false
    elseif (act.health <= 0.5) and act:object("medkit_army") then
        act:eat(act:object("medkit_army"))
        f_1 = false
    elseif (act.health <= 0.5) and act:object("medkit_scientic")   then
        act:eat(act:object("medkit_scientic"))
        f_1 = false
    elseif (act.health <= 0.5) and act:object("suvorotka")   then
        act:eat(act:object("suvorotka"))
        f_1 = false
    elseif act:get_bleeding() > 0.3 and act:object("bandage") then
        act:eat(act:object("bandage"))
        f_1 = false
    end
    if not f_1 then
        do_heal(true,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Обнаружены мед. препараты. Произвожу применение.".."\n")
        f_1_end = false
        return
    elseif not f_1_end then
        do_heal(false,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".." Мед. препараты не обнаруженны.".."\n")
        f_1_end = true
    end
end

function new_system_rad()
    local act = db.actor
    if act.radiation < 0.75 then 
        f_2 = false        f_2_end = false
        return 
    end
    if not f_2 then
        news_manager.send_tip(act, "%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Полученная доза радиации близка к критичной, если у вас есть антидоты, то Система Жизненой Поддержки выведет радиацию из организма при опасной потере здоровья".."\n", nil, nil, 30000)
    end
    f_2 = true
    local anti_1 = act:object("antirad") 
    if (act.health <= 0.6) and anti_1 then
        act:eat(anti_1)
        do_heal(true,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Обнаружены антидоты. Система Жизненой Поддержки производит применение \"антирадиантов\".".."\n")
        f_2 = false
        f_2_end = false
        return
    elseif (act.health <= 0.6) and not f_2_end then
        do_heal(false,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Антидоты не обнаруженны.".."\n")
        f_2_end = true
    end

end

function new_anti_dot()
    local act = db.actor
    if db.actor.psy_health >= 0.5 then
        f_3 = false        f_3_end = false
        return
    end

    if not f_3 then
        news_manager.send_tip(act, "%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Полученная доза пси-излучения привела к вашему зомбированию. Если у вас есть антидоты, то Система Жизненой Поддержки выведет пси-излучение из организма ".."\n", nil, nil, 30000)
    end
    f_3 = true
    local a1 = act:object("antizombie") 
    if a1 then
        act:eat(a1)
        do_heal(true,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Обнаружены антидоты. Система Жизненой Поддержки производит применение \"антирадиантов\".".."\n")
        f_3 = false
        f_3_end = false
        return
    elseif not f_3_end then
        do_heal(false,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Антидоты не обнаруженны.".."\n")
        f_3_end = true
    end
end


function new_system_power()
    local act = db.actor
    if act.power > 0.25 then 
        f_4 = false        f_4_end = false
        return 
    end

    if not f_4 then
        news_manager.send_tip(act, "%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Вы устали. Ищу энергетики".."\n", nil, nil, 30000)
    end
    f_4 = true
    local el = act:object("energy_drink") 
    if el then
        act:eat(el)
        do_heal(true,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Обнаруженны энергетики. Произвожу введение в тело носителя.".."\n")
        f_4 = false
        f_4_end = false
        return
    elseif not f_4_end then
        do_heal(false,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".." Энергетиков нет. Отдохните.".."\n")
        f_4_end = true
    end
end




function exo_in_section(item)
    local itm = item:section()
    if itm == "exo_mil_exoskeleton_addr" then
        alife():create(itm, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
        alife():release(alife():object(item:id()))
    end
end

function have_item_namber(itm,need_namber)
    return amk_utils.inventory_search(itm, need_namber)
end

function delete_some_somth(section, count)
    news_manager.relocate_item(db.actor, "out", section, count)
    db.actor:iterate_inventory(
    function(dummy, item)
    if (count > 0) and (item:section() == section) then
        alife():release(alife():object(item:id()))
        count = count - 1
    end
    end,
    db.actor)
end

function dbglog(fmt,...)    
    local msg = string.format(fmt, ...)    
    local msg_no_ws = string.gsub(msg, "%s", "_" )    
    get_console():execute("dbg:" .. msg_no_ws)
end

function do_heal(a,str)
    if a then
        play_snd([[meceniy\outfit\est_med]])
    else
        play_snd([[meceniy\outfit\net_med]])
    end
    news_manager.send_tip(db.actor, str, nil, nil, 30000)
end

function play_snd(snd)
    local snd_obj = xr_sound.get_safe_sound_object(snd)
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
end

 

 

--\\*"НаноЭкзоСкелет "Скат-15М""..С Системой Жизненной Поддержки (СЖП) и С возможностью апгрейда..Меченый(Стрелок)..
local t_upd = 0
local f_1 = false
local f_1_end = false

local f_2 = false
local f_2_end = false

local f_3 = false
local f_3_end = false

local f_4 = false
local f_4_end = false

local is_pleer = false

local con_skat_1 = 1
local con_skat_2 = 1
local con_skat_3 = 1
local con_skat_4 = 1 -- DMX UPGRADE

local flag_skat_1 = false
local flag_skat_2 = false
local flag_skat_3 = false
local flag_skat_4 = false -- DMX UPGRADE

function on_actor_update()
--    on_sub_actor_update()    
    local outfit = db.actor:item_in_slot(6)

        if not is_pleer then
    --    meceniy_outfit.is_pleer = false
            player_ogg.start_pleer_post_save()
            is_pleer = true
        end


    if not outfit or not string.find(outfit:section(),"exo_mil_exoskeleton_add") then
        return
    end

    if t_upd<time_global() then
        t_upd=time_global()+1000

        if flag_skat_1 then        
            local e_up1 = db.actor:object("exo_mil_exoskeleton_add")
            if e_up1 then
                e_up1:set_condition(con_skat_1)
get_console():execute("1")
            end
            flag_skat_1 = false
        elseif flag_skat_2 then        
            local e_up2 = db.actor:object("exo_mil_exoskeleton_addr")
            if e_up2 then
                e_up2:set_condition(con_skat_2)
get_console():execute("2")
            end
            flag_skat_2 = false
        elseif flag_skat_3 then        
            local e_up3 = db.actor:object("exo_mil_exoskeleton_addrs")
            if e_up3 then
                e_up3:set_condition(con_skat_3)
get_console():execute("3")
            end
            flag_skat_3 = false
        elseif flag_skat_4 then        -- DMX UPGRADE ON
            local e_up4 = db.actor:object("exo_mil_exoskeleton_dmx")
            if e_up4 then
                e_up4:set_condition(con_skat_4)
get_console():execute("4")
            end
            flag_skat_4 = false     -- DMX UPGRADE OFF
        end

        system_outfit()
        if outfit:section() == "exo_mil_exoskeleton_addr" then
            new_system_rad()
        elseif outfit:section() == "exo_mil_exoskeleton_addrs" then
            new_system_rad()
            new_system_power()

            new_anti_dot()
        elseif outfit:section() == "exo_mil_exoskeleton_dmx" then -- DMX UPGRADE ON
            new_system_rad()
            new_system_power()

            new_anti_dot()                                        -- DMX UPGRADE OFF
        end
    end

end



function on_sub_actor_update()
    update_spawn()
end

function update_spawn()
            alife():create("doc_1",vector():set(-198.597,4.488,168.971),25633,1363)
            alife():create("art_acumm",vector():set(-33.133,3.548,-64.111),198,1960)
            alife():create("doc_8",vector():set(-33.133,3.548,-64.111),198,1960)
            alife():create("doc_10",vector():set(-89.387,-2.457,-25.271),19105,2875)
            alife():create("art_acumm",vector():set(-89.387,-2.457,-25.271),19105,2875)
            spawner()
end


function on_item_drop(obj)
    if obj:section() == "doc_1" then
        doc_use()
    elseif obj:section() == "doc_8" then
        doc_use_2()
    elseif obj:section() == "doc_10" then
        doc_use_3()
    elseif obj:section() == "dmx_skat15_upgrade" then  -- DMX UPGRADE
        doc_use_4()
    end
end

function doc_use()
    local e1 = db.actor:object("exo_mil_exoskeleton")
    if e1 then
        con_skat_1 = e1:condition()
        alife():release(alife():object(e1:id()))
        amk.spawn_item_in_inv("exo_mil_exoskeleton_add")
        flag_skat_1 = true
        news_manager.send_tip(db.actor, "Апгрейд Закончен", nil, nil, 10000)
        alife():create("art_acumm",vector():set(-89.387,-2.457,-25.271),19105,2875)
        update_spawn_2()
    else
        amk.spawn_item_in_inv("doc_1")
    end
end

function update_spawn_2()
    alife():create("art_acumm",vector():set(-89.387,-2.457,-25.271),19105,2875)
end

function doc_use_2()
    local e2 = db.actor:object("exo_mil_exoskeleton_add")
    if e2 then
        con_skat_2 = e2:condition()
        alife():release(alife():object(e2:id()))
        amk.spawn_item_in_inv("exo_mil_exoskeleton_addr")
        flag_skat_2 = true
        news_manager.send_tip(db.actor, "Апгрейд Закончен", nil, nil, 10000)
    else
        amk.spawn_item_in_inv("doc_8")
    end
end


function doc_use_3()
    local e3 = db.actor:object("exo_mil_exoskeleton_addr")
    if e3 then
        con_skat_3 = e3:condition()
        alife():release(alife():object(e3:id()))
        amk.spawn_item_in_inv("exo_mil_exoskeleton_addrs")
        flag_skat_3 = true
        news_manager.send_tip(db.actor, "Апгрейд Закончен", nil, nil, 10000)
    else
        amk.spawn_item_in_inv("doc_10")
    end
end

function doc_use_4()     -- DMX UPGRADE ON
    local e4 = db.actor:object("exo_mil_exoskeleton_addrs")
    if e3 then
        con_skat_4 = e4:condition()
        alife():release(alife():object(e4:id()))
        amk.spawn_item_in_inv("exo_mil_exoskeleton_dmx")
        flag_skat_4 = true
        news_manager.send_tip(db.actor, "Апгрейд Закончен", nil, nil, 10000)
    else
        amk.spawn_item_in_inv("dmx_skat15_upgrade")
    end
end                      -- DMX UPGRADE OFF

function spawner()
    alife():create("art_acumm",vector():set(-89.387,-2.457,-25.271),19105,2875)
end

function system_outfit()
    local act = db.actor
    if (act.health > 0.5) and (act:get_bleeding() <= 0.3) then 
        f_1 = false        f_1_end = false
        return 
    end
    if (act.health <= 0.5) and (not f_1) then    
        news_manager.send_tip(act, "%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Ваше Состояние Здоровья ниже 50% от Обычного Состояния, если у вас есть мед. препараты, то Система Жизненой Поддержки произведет лечение".."\n", nil, nil, 30000)
    elseif (act:get_bleeding() > 0.3) and (not f_1) then    
        news_manager.send_tip(act, "%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."У вас сильное кровотечение, если у вас есть мед. препараты, то Система Жизненой Поддержки произведет лечение".."\n", nil, nil, 30000)
    end
    f_1 = true
    if (act.health <= 0.5) and act:object("medkit") then
        act:eat(act:object("medkit"))
        f_1 = false
    elseif (act.health <= 0.5) and act:object("medkit_army") then
        act:eat(act:object("medkit_army"))
        f_1 = false
    elseif (act.health <= 0.5) and act:object("medkit_scientic")   then
        act:eat(act:object("medkit_scientic"))
        f_1 = false
    elseif (act.health <= 0.5) and act:object("suvorotka")   then
        act:eat(act:object("suvorotka"))
        f_1 = false
    elseif act:get_bleeding() > 0.3 and act:object("bandage") then
        act:eat(act:object("bandage"))
        f_1 = false
    end
    if not f_1 then
        do_heal(true,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Обнаружены мед. препараты. Произвожу применение.".."\n")
        f_1_end = false
        return
    elseif not f_1_end then
        do_heal(false,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".." Мед. препараты не обнаруженны.".."\n")
        f_1_end = true
    end
end

function new_system_rad()
    local act = db.actor
    if act.radiation < 0.75 then 
        f_2 = false        f_2_end = false
        return 
    end
    if not f_2 then
        news_manager.send_tip(act, "%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Полученная доза радиации близка к критичной, если у вас есть антидоты, то Система Жизненой Поддержки выведет радиацию из организма при опасной потере здоровья".."\n", nil, nil, 30000)
    end
    f_2 = true
    local anti_1 = act:object("antirad") 
    if (act.health <= 0.6) and anti_1 then
        act:eat(anti_1)
        do_heal(true,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Обнаружены антидоты. Система Жизненой Поддержки производит применение \"антирадиантов\".".."\n")
        f_2 = false
        f_2_end = false
        return
    elseif (act.health <= 0.6) and not f_2_end then
        do_heal(false,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Антидоты не обнаруженны.".."\n")
        f_2_end = true
    end

end

function new_anti_dot()
    local act = db.actor
    if db.actor.psy_health >= 0.5 then
        f_3 = false        f_3_end = false
        return
    end

    if not f_3 then
        news_manager.send_tip(act, "%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Полученная доза пси-излучения привела к вашему зомбированию. Если у вас есть антидоты, то Система Жизненой Поддержки выведет пси-излучение из организма ".."\n", nil, nil, 30000)
    end
    f_3 = true
    local a1 = act:object("antizombie") 
    if a1 then
        act:eat(a1)
        do_heal(true,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Обнаружены антидоты. Система Жизненой Поддержки производит применение \"антирадиантов\".".."\n")
        f_3 = false
        f_3_end = false
        return
    elseif not f_3_end then
        do_heal(false,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Антидоты не обнаруженны.".."\n")
        f_3_end = true
    end
end


function new_system_power()
    local act = db.actor
    if act.power > 0.25 then 
        f_4 = false        f_4_end = false
        return 
    end

    if not f_4 then
        news_manager.send_tip(act, "%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Вы устали. Ищу энергетики".."\n", nil, nil, 30000)
    end
    f_4 = true
    local el = act:object("energy_drink") 
    if el then
        act:eat(el)
        do_heal(true,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".."Обнаруженны энергетики. Произвожу введение в тело носителя.".."\n")
        f_4 = false
        f_4_end = false
        return
    elseif not f_4_end then
        do_heal(false,"%c[10,241,129,129]".."Система Жизненной Поддержки:".."\\n".."%c[10,241,129,129]".." Энергетиков нет. Отдохните.".."\n")
        f_4_end = true
    end
end




function exo_in_section(item)
    local itm = item:section()
    if itm == "exo_mil_exoskeleton_addr" then
        alife():create(itm, db.actor:position(), db.actor:level_vertex_id(), db.actor:game_vertex_id(), db.actor:id())
        alife():release(alife():object(item:id()))
    end
end

function have_item_namber(itm,need_namber)
    return amk_utils.inventory_search(itm, need_namber)
end

function delete_some_somth(section, count)
    news_manager.relocate_item(db.actor, "out", section, count)
    db.actor:iterate_inventory(
    function(dummy, item)
    if (count > 0) and (item:section() == section) then
        alife():release(alife():object(item:id()))
        count = count - 1
    end
    end,
    db.actor)
end

function dbglog(fmt,...)    
    local msg = string.format(fmt, ...)    
    local msg_no_ws = string.gsub(msg, "%s", "_" )    
    get_console():execute("dbg:" .. msg_no_ws)
end

function do_heal(a,str)
    if a then
        play_snd([[meceniy\outfit\est_med]])
    else
        play_snd([[meceniy\outfit\net_med]])
    end
    news_manager.send_tip(db.actor, str, nil, nil, 30000)
end

function play_snd(snd)
    local snd_obj = xr_sound.get_safe_sound_object(snd)
    snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)
end

 

 

Я так понимаю, функция отвечающая за зависимость от артов находится в meceniy_art.script, так что там ничего изменять не надо. Ведь так?

Посмотрите плиз кому не трудно :)

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

function doc_use_4()     -- DMX UPGRADE ON
    local e4 = db.actor:object("exo_mil_exoskeleton_addrs")
    if e3 then
        con_skat_4 = e4:condition()
        alife():release(alife():object(e4:id()))
        amk.spawn_item_in_inv("exo_mil_exoskeleton_dmx")
        flag_skat_4 = true
        news_manager.send_tip(db.actor, "Апгрейд Закончен", nil, nil, 10000)
    else
        amk.spawn_item_in_inv("dmx_skat15_upgrade")
    end
end                      -- DMX UPGRADE OFF

вместо if e3 then должно быть if e4 then.

sapsan

 

Спасибо. Щас потестил, работает отлично :)

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

Kolmogor,

Рома, эта надпись появилась после присоединения первой локи из Костиного пака - пещеры.

Еще 10 лет таких цен, зарплат и пенсий, и вместо переписи населения будет перекличка

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

Arhara,

начал сейчас новую игру в ТЧ на статике. Кордон. В логе:

* t-report - base: 866, 249933 K

* t-report - lmap: 10, 10241 K

***FATAL***: Too many lmap-textures (limit: 8 textures or 32M).

Reduce pixel density (worse) or use more vertex lighting (better).

Собственно столько в папке levels\l01_escape файлов lmap*.dds. Сходится как по количеству, так и по размеру

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

Kolmogor, А кто на чем играет?

Немного вводных, что бы не путаться:

У меня сейчас на компе Три варианта SHOC и каждый в полном наборе *.db* с разноской папок для лога и сохранок:

1. распакованный 1.0004, -- чисто для проверок и сравнения файлов

2. АМК 1.4.1(2-патча)+ текстуры АВ переформатированные,

3. NS (последний набор на 03.09 без исправления текстур)

Да еще user.ltx от оригинала - переустанвливал с дефолтными настройками.

Что в логе на динамике (что такое статика не знаю - никогда еще не переключался):

1. - не запускал (вернее года два назад стартанул с распаковки без *.db*, но лог не сохранял)

2. \l01_escape - кордон - побегал с экспериментами, повоевал на мосту:

* t-report - base: 1453, 583707 K

* t-report - lmap: 5, 5120 K -- кстати их в оригинале как раз 5 парных суммарно на диске 10,0 МБ (10 526 720 байт)

Лимит lmap-textures не нарушен

3. Стартовая загрузка NS, тот же кордон встреча со Звездочетом, диалог, получение аптечки и ... вышел, потому как надоело в Соли первым делом искать кноповку на отключение интерактивной музыки (лично мне совсем не нравиться, а систему грузит настолько мощно, что первые кадры загрузки - сплошное слайд-шоу, а пока не отключишь реакция курсора ГГ с сильными тормозами).

* t-report - base: 1590, 756416 K

* t-report - lmap: 7, 7168 K

Лимит lmap-textures не нарушен

Почему лайтмапы по разному грузятся? Не изучал. Даже еще представления не имею.

Может ли это в чистом виде вызвать краш? Ну тоже непонятно - ни разу не случалось такое. Из-за ошибок либо чистый лог, либо конкретная причина - но не лайтмапы.

В чем вижу пока разницу - разные shaders.

В АМК - родные из комплекта самого мода - от оригинала отличаются 5 файлами по воде

effects_water.s 1903 08.02.09 21:51:28 != 16.05.08 23:02:24 2072 effects_water.s

water.ps 3461 08.02.09 21:51:30 != 22.05.08 23:52:06 3874 water.ps

water.vs 3918 08.02.09 21:51:30 != 16.05.08 23:02:24 4295 water.vs

waterd.ps 1426 08.02.09 21:51:30 != 16.05.08 23:02:24 2000 waterd.ps

waterd.vs 905 08.02.09 21:51:30 != 16.05.08 23:02:24 1286 waterd.vs

 

 

В NS - ??

deffer_impl_flat.vs 109 02.04.09 09:09:58 ->

deffer_impl_lmh_flat.ps 2013 16.05.10 19:12:38 ->

deffer_impl_lmh_flat.vs 109 02.04.09 09:09:58 ->

deffer_impl_lmh_flat_d.ps 55 03.04.08 00:12:46 ->

deffer_impl_lmh_flat_d.vs 109 03.04.08 00:12:46 ->

effects_water.s 2222 27.11.08 16:09:26 != 16.05.08 23:02:24 2072 effects_water.s

effects_waterryaska.s 1907 27.11.08 16:09:26 != 16.05.08 23:02:24 1905 effects_waterryaska.s

effects_waterstuden.s 1906 25.11.03 16:41:36 != 16.05.08 23:02:24 1904 effects_waterstuden.s

water.ps 4503 27.11.08 16:09:38 != 22.05.08 23:52:06 3874 water.ps

water.vs 4309 27.11.08 16:09:38 != 16.05.08 23:02:24 4295 water.vs

 

 

 

PS. Как поступить с "музоном" уже знаю, сделал заготовки очищенных файлов, но пока не разберусь со "своими проблемами" буду чистый АМК мучить.

Просьба: на офф. форуме и на геминаторе ссылки на правленные xrRender_R2.dll устарели - можно перезалить? Хочется пощупать плотность травы.

 

По "музону" - после старта игры нажать Esc и в главном меню появится пункт "АМК опции" и там будет "Динамическая музыка".

На счет слайд-шоу - какое у тебя железо ? Обновлял ли директХ дрова на звук ? Или, к примеру, у тебя в настройках игры для звука включен EAX, а звуковая твоя реализует его програмно...sapsan

 

sapsan Я знаю, где какие кнопки находятся :rolleyes:

Написал по факту что заметил при старте Соли, не слайд-шоу в "обычном" понимании, но весьма сильная заторможенность действа. Музон не нравится из принципа - буду убирать в ноль и пробовать загрузку - тогда у меня будет четкое представление на насколько музон гасит стартовую производительность. EAX - тоже выключаю. Писк сверчков и без него слышен. Дровки регулярно обновляю и на систему пока не жалуюсь, тянет многое и соль в том числе.

 

2Kolmogor, Так не факт, что эта проверка лайтмапов влияет на краш, там еще на некоторые "родные" шейдеры рисует в логе конфликт -"! Version conflict in shader 'def_shaders\def_aref'" и др. Тоже, наверное, не почистили проверку совместимости и прочего пооставалось немало, чего не юзается релизом.

Если это не является причиной снижения производительности, ну и ладненько. Обартили внимание, разобрались что пустышку тянем.

В сохранившемся логе CoP на Затоне * t-report - lmap: 16, 16386 K и нормально все без крика про фатал.

Если у кого после репорта по лайтмапам - краш и лог пустой, так стоит задуматься чего он сам натворил. Потому что дальше по логу запись:

* phase time: 30937 ms -- больше текстур - больше надо времени?

* phase cmem: 370523 K

Солянка: Синхронизация...

ну или для АМК

* phase time: 14916 ms

* phase cmem: 300985 K

Клиент: Синхронизация...

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

1. Все лайтмапы используются только на статике, на динамике используется гораздо меньше.

 

2. Никакими модами, ни каким подключением новых локаций количество используемых лайтмапов на старых локациях не изменить. Как кордон скомпилировали на 10 лайтмапов, так он и будет использовать 10. Можно открыть папку локации в levels и посмотреть сколько лайтмапов для каждого уровня. Именно столько и выведется в логе на статике

 

3. Никакой предельно-допустимой нагрузки для движка нет. Или, по крайней мере, она гораздо больше 8 текстур и 32Мб. Эта проверка осталась с двухтысячных годов, а сейчас производительность видеокарт выросла на порядки. В большинстве уровней ТЧ используется больше 8 лайтмапов, на станции 2 используется 18 лайтмапов.

 

[spoiler=Можно провести стресс-тест :)]Есть скомпиленный ацтек под ТЧ: у него 222 лайтмапа на 222Мб !!! :) Обращаться к D1mon

 

 

Просьба: на офф. форуме и на геминаторе ссылки на правленные xrRender_R2.dll устарели - можно перезалить? Хочется пощупать плотность травы.

Лучше спроси на этих форумах - у меня нет этих дллек

Ссылка на комментарий
Такой вопрос: кто-нибудь пробовал отключить радиоактивность у машин? Ковырялся, ничего не нашел по этому поводу...

Они радиоактивны если в рюкзаке или на поясе арты излучающие радиацию, выкинь их и ездий спокойно. Ну а если ты про то чтоб вобще не фонило с артами, я бы тоже хотел знать.

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

deadmoroz, Trapper023, или ещё кто в курсе, камрады, у меня к вам вопрос. В теории, я особо не силён, подскажите, бамп вместе с текстурой в память загружается? Если да, то это плохо. На старых локах из новых текстур грузятся только визуалы и оружие. Оружие, бог с ним, а вот по папке act посмотрел, к худам прилагается бамп, который весит в 4 раза больше самой текстуры. Есть визуалы которые по весу равны Аргусовскому асфальту. Есть два предложения, весь бамп худа уменьшить до размера 512Х512, и можно вообще удалить серый бамп, вместо него кинуть "пустышки". Паралакс нужен в основном для стен, техники, крупный объектов, ну и для оружия, а для визуалов хватит и нормали.

Удачи!

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

chorik там вроде эффект наложения происходит. Вообще бамп странная штука. Я как-то химичил с бампом линзы. Один раз получилось так, что при развороте линзы в сторону солнца она меняла цвет с синего на красный(или наоборот, я точно непомню).

Бампы вообще всегда посути должны весить больше простой текстуры поскольку текстура может и неиспользовать альфа канал, а вот бампу никак необойтись без альфы. А тут еще это сжатие DXT1. При нем (учитывая сохранение альфы) качество отображения текстуры будет зависеть от настроек игры.

При сжатии DXT5 качество текстуры небудет зависеть от настроек игры(почему незнаю).

Моя формула оптимизации текстуры такова:

1) Оригинальные текстуры, т.е. основа, сохраняются с сжатием DXT1 без альфы.

2) Бампы сохраняются в том же разрешении, но с сжатием DXT5.

3) Есть некоторые кампризные текстуры, которые нельзя сохранять в отличном от их оригинала сжатии(почему незнаю, но при попытке сменить сжатие изображение начинает использовать только черный и белый цвета).

Остальное же является капризами создателя текстур - Mip-mapping, разрешение, сжатие оригинала текстуры и прочее...

Также есть текстуры которые сохраняются со специфичеким сжатием.

А еще например текстуры террейна нельзя сохранять в DXT1, иначе на них не будут отрисовываться текстуры земли, травы, асфальта и др.

Также незабываем про загадочный textures.ltx, об особенностях которого я пока мало знаю.

 

Во общем чтобы достичь идеального балланса и оптимизации нужно многое знать об особенностях игры использовать те или иные ресурсы.

 

 

Я достиг всего этого практикой, а не теорией.

Изменено пользователем Galil
Ссылка на комментарий
Galil, по линзе, для неё нужен блеск, за него отвечает красный канал зелёного бампа, чем светлее, тем больше блестит, а игра света? По горизонтали работает альфа-канал этого бампа а по вертикали синий. По оптимизации, с тобой немного не согласен. Основная часть текстур у ПЫСов сохранена с сжатием DXT1 и однобитной альфой, даже текстуры которые имеют в альфа-канале прозрачность. Хотя есть и с сжатием DXT3 и DXT5, но это в основном окна. А бамп можно делать и с меньшим размером, если тектура 1024Х1024, то бамп можно 512Х512, главное сохранить с сжатием DXT5. Вот по тирейнам не знаю, это теория, я больше практик. По загадочный textures.ltx, действительно загадочный, когда начал им интересоваться, туториалов не нашёл, пришлось самому догадываться. Но сейчас, слава богу разобрался, есть пару непонятных моментов, но они не столь важны. Если будут вопросы по этому файлу обращайся, без проблем.
Ссылка на комментарий

chorik, Я уже две недели тестю уменьшенные текстуры. Текстуры и бампы уменьшёны до 512Х512. Графика практически не страдает, а игра визуально идет лучше.

Вот ссылки 1 2 3 если интересно.

Изменено пользователем крайт

Мой комп- Intel Core 2 Quad Q9400-2.67/4Gb/HDD 1Tb/1Gb ATI HD 4890/DVD-RW/Card Reader/600Wt 64-разрядная Windows 7 Ultimate.

Сталкер ТЧ v.1.0006 НС от 19.04+14.08+адапт. для 1.0006+Патч от 20.08+3.09+Ребаланс костюмов V-2....Убираем kartin_pack

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

крайт, разница по весу текстуры 1024Х1024 и 512Х512 если они сжаты в DXT1 практически небольшая, при уменьшении размера можно потерять качество. А вот по бампам да, пара бампа в 4 раза больше текстуры. Я о чём и говорю. Может стоит перегнать большой бамп Солянки в меньший размер?

крайт, да бог с ним, с бампом, это не текстура, при его уменьшении может пострадать рельефность и объёмность картинки, но то что ты уменьшил саму текстуру, я например, это не приветствую. Если при компиляции объекта была заложена текстура 1024Х1024, то пусть так и останется. При уменьшении теряются половина пикселей, а потом, в игре, движок её все равно растянет до нужного размера, и при этом недостающие пиксели будут заменены на соседние. С первого взгляда картинка не поменяется, но если присмотреться, разницу можно увидеть.

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

chorik, Разница в весе примерно в 1Мг. А качество посмотри c8c642a0711da563348b1572de8cec6e5f1afc71811669.jpgc56800fec60db91454c63d222b775e8e5f1afc71811813.jpg

chorik, Разницу видно первые пять минут игры, если присматриваться. А FPS поднялся на 20-30 единиц.

 

Если так сравнивать, то да все плохо. Но вспомни когда ты в последний раз разглядывал УАЗ в игре?

Третья намного лучше родной.

Изменено пользователем крайт

Мой комп- Intel Core 2 Quad Q9400-2.67/4Gb/HDD 1Tb/1Gb ATI HD 4890/DVD-RW/Card Reader/600Wt 64-разрядная Windows 7 Ultimate.

Сталкер ТЧ v.1.0006 НС от 19.04+14.08+адапт. для 1.0006+Патч от 20.08+3.09+Ребаланс костюмов V-2....Убираем kartin_pack

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

крайт, а разница заметна, вот посмотри на фару первого уаза

image.jpeg

а теперь на тоже у второго

image.jpeg

на первом не видно мелкие детали, они сгладились. Первая фотка с уменьшённой текстуры.

 

Добавлено через 17 мин.:

Если так сравнивать, то да все плохо. Но вспомни когда ты в последний раз разглядывал УАЗ в игре?

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

Дефолтная картинка

image.jpeg

даже если поменять ПЫСовский бамп, не трогая текстуру, то уже лучше

image.jpeg

а если подправить текстурку, то кажись покрасивше

image.jpeg

 

 

Изменено пользователем chorik
Ссылка на комментарий
Остальное же является капризами создателя текстур - Mip-mapping, разрешение, сжатие оригинала текстуры и прочее...

Прошу прощения, но это бред. Почитайте последние несколько страниц - там достаточно про это написано. И подтверждено теорией, кстати.

По "формуле".

1) сжатие DXT1 (согласен), но 1-битная альфа.

2) Бампы - разрешение необязательно то же, что у основы, сжатие - DXT5.

3) "кампризные" текстуры не встречал, сорри.

 

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

А спорить тут не о чем: кого-то устраивает некоторая потеря качества в уплату за быстродействие, а у кого-то и так идёт все отлично - зачем же ему это?

 

сохранил текстуру дерева в не нужном для ней сжатии

Galil, формулировка мне непонятна, поконкретнее. Каком именно?

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

Железо: Intel Core i5 9400F / 16Gb DDR4 2400MHz / SSD NVMe M.2 Samsung 970 EVO Plus 256Gb / GF GTX 1050Ti 4Gb Ось: Win10x64

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

1) Альфа нужна только для псевдо блеска на статике, а так невижу смысла использовать альфу во многих текстурах.

2) С разрешением согласен, но желательно чтобы совпадало.

3) Вот что получилось когда сохранил текстуру дерева в не нужном для ней сжатии:

ss100810195204l02garbag.th.jpg

ss100810193826l01escape.th.jpg

 

Я и в DXT1 сжимал и в DXT5. Альфа была включена в текстуры. Насчет Mipmap непомню.

Вот щас посматрел папку с текстурами дерева - есть и с DXT1 и с DXT5 сжатием.

Изменено пользователем Galil
Ссылка на комментарий
Гость
Эта тема закрыта для публикации сообщений.
  • Недавно просматривали   0 пользователей

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