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

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


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

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

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

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

Arhara, в прошлой допе не было вызова функции удаления Черномора-зомби при его лечении, хотя сама функция удаления была в архара_диалог. Щас ее

(function dell_chernomor_zombi()) тоже не видать. Вызов потерялся или может я чего перемудрил?

MAV, чтобы зомби говорили, у них в профиле должен быть прописан диалог. Так как ПЫС не предполагали подобное, то у них в профиле диалоги отсутствуют.

Shadowman, да так и есть. Был бы процессор помощнее, проблем было бы поменьше. А насчет переполнения стека: только сам решил зайти на Болото - сразу вылеты типа out of memory с кучей самых разных аргументов. Упирается движок уже в эти 2 гига, без ключа -noprefetch уже не обойтись, а на болоте - строго статика.

Изменено пользователем dimos
Цензура ограничивает творчество © by me
Ссылка на комментарий
Закомментировал в бинд_сталкер.скрипт арбалет и сразу появились часы и биорадар. Ковырнуть бы этот арбалет на предмет меньшего потребления ресурсов. Может у кого есть какие соображения?

dimos, Можно, я выскажусь? Поскольку чуть позже выяснилось, что и некоторые другие действия по разгрузке проца приводят к такому же благотворному результату, лично мне кажется, что дело не в конкретном участке кода/функции/скрипте, а в критической нагрузке на процессор, которую удаётся снять любым из перепробованных тобой способов.

Кстати, почти уверен, что переполнение стека и остальные чудеса у Romale имеют похожее объяснение, разве что в его случае перегруз не проца, а игровой памяти (помните про ограничение 2Гб/приложение?). И, например, возможно если в уборщике к примеру прописать более жесткие параметры уборки и систематические вылеты с разными логами (заметьте, с разными!) сами собой пройдут. Могу, конечно, ошибаться, но стоит попробовать что-нибудь удалить, не относящееся непосредственно к описанным проблемам - например, каких-нибудь крыс на других локах - чисто для эксперимента.

 

dimos, прикол еще в том, что ключ -noprefetch работает только до 1.0005. Ну и кстати, на патче 1.0005 проблем с памятью поменьше.

В прошлую допу прошел болота на полной динамике без единого вылета (2 дня, по нескольку часов играл, "семерка", патч 1.0006). В этой допе не дошел еще до болота...

 

Monnoroch, я знаю. И даже подозреваю, почему именно на новом АТП, к примеру, жалобы на вылеты с переполнением стека чаще всего.

Как я понимаю, там опять же из-за лавинообразной обработки колбеков разного типа (хит, смерть) система или железо не справляется, стек вовремя не освобождается и это приводит к его переполнению. Но сути высказывания это не меняет - игра захлёбывается и результатом является вылет с матюком на стек.

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

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

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

Shadowman, немного не так,память и стек - вещи разные.

стек он нехило меньше.

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

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

Привет всем. Я тут по вопросу из Autosave мода. Его, как я знаю, доработали для Солянки Shadowman и sapsan. Все работает, все гуд, но есть одна мелочь:

955036a27b7da7f58e3a567fcf364bef5ee80866360052.jpg

Сейвы которые ниже - это чистый Автосейв мод. А которые выше пошли, где сохранение с именем "admi.-xxx" это ваша доработанная версия.

В чистой сохранялось "admin - xxx" - это намного лучше и красивей (аля ЗП).

И вообщем что хотел спросить: можно ли в доработанной версии вернуть "вид сохранения" как в чистом Автосейве?

Вот, чтобы не искали скрипт, даю здесь:

function printf(str,...)
    if not str then
        str = "((string is nil))"
    end
    get_console():execute("load ~#I#:"..string.format(str,...))
end

--
-- Sprawdzenie, czy jest gra i czy aktor jest їywy
--
function isGameOn()
    if level.present() and db.actor ~= nil and db.actor:alive() then
        return true
    end
    return false
end

--
-- Zapis stanu gry (save)
--
function savegame(save_name)
    if save_name == nil then
        printf("Trying to save a game without any name!")
        return false
    end
    if isGameOn() then
        local save_param = user_name().."-"..save_name
        save_param = string.gsub(save_param,"[><|?*/\\:\"%b/n]",".")
        save_param = string.gsub(save_param,"[%%][c][\[][%a%d%p%s]*[\]]","")
        save_param = string.gsub(save_param,"Задание выполнено","Выполнено ")
        if string.len(save_param)>64 then
            save_param = string.sub(save_param,1,64)
        end
        get_console():execute("save "..save_param)
    end
end

 

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

Предлагаю такой вариант:

        local save_param = user_name().."-"..save_name -- если сильно хочется как в ЗП, то вместо "-" пишем " - "
        save_param = string.gsub(save_param,"%%c\[[%w%s%p]*\]","") -- убираем цвет
        save_param = string.gsub(save_param,"[^%w _-]+",".") -- последовательность всего, что не буквоцифра и не пробел, и не подчеркивание, и не дефис - заменить на одну точку
        save_param = string.gsub(save_param,"Задание выполнено","Выполнено ") -- сокращение (можно аналогично добавить "нформаци", "нф-" и другие)

О результатах прошу отписаться в это же сообщение. sapsan

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

Наработки-разработки:

Можно что-угодно куда-угодно спавнить с задержкой во времени. В скрипт

new_spawn.script добвлена функция function doSpawn(tblSpawn), которая принимает на вход таблицу такого формата:
    local tbl = {
        ["spawn_item"] = {--спавним объекты на карту
            {sect="ros_killer_respawn_4",pos={-259.963623,-0.000217974,22.387314},lv=6507,gv=1395}, -- спавним обычным способом
            {sect="ros_killer_respawn_4",pos={0,2,0}}, -- спавним в 2-х метрах над ГГ 
        },
        ["spawn_item_in_inv"] = {-- спавним объекты в инвентарь
            {sect="gold_art", npc_id=0}, -- спавним в рюкзаке у ГГ
        },
        ["spawn_ammo_in_inv"] = {-- спавним патроны в инвентарь
            {sect="ammo_12x70_buck", npc_id=0, number=20}, -- спавним патроны в рюкзаке у ГГ
        }
    }

Эту функцию можно вызывать как напрямую, так и посредством таймера (пример из new_spawn.script):

function bar_james()
    local tbl = {
        ["spawn_item"] = {--спавним объекты на карту
            {sect="ros_killer_respawn_4",pos={-259.963623,-0.000217974,22.387314},lv=6507,gv=1395},
            {sect="ros_killer_respawn_4",pos={-257.169403,-0.000773012,5.0113105},lv=7481,gv=1395},
            {sect="ros_killer_respawn_4",pos={-263.326446,-0.00097110867,11.14619922},lv=5620,gv=1395},
            {sect="ros_killer_respawn_4",pos={-248.740127,-0.00184855,6.270340919},lv=10240,gv=1396},
        }
    }
    amk.start_timer("spawn_wait", 2, tbl)
end

который реализован в amk.script так:

    func_by_string["spawn_wait"] = function (params_string)
        local tbl = unpack_array_from_string(params_string)
        new_spawn.doSpawn(tbl)
    end

 

 

Реализация в скрипте sol_sound.script.

Разные варианты запуска озвучки:

play_sound_on_actor([[characters_voice\human_03\stalker\talk\leave\leave_5]], 0, true, nil)

1. имя звука; 2. таймаут (время задержки); 3. прерывать ли предыдущий звук в своей очереди; 4. имя очереди (если == nil, то никакой очереди по своей сути нет)

Подходит для СМС и подобных, которые звучат в голове у ГГ.

 

play_sound_on_actor_shift([[characters_voice\human_03\stalker\talk\leave\leave_5]], 0, true, nil, 1, 1, 0)

То же самое, но со здвигом относительно ГГ. Сдвиг статичный и не привязак к взгляду ГГ (не справился я с этой задачей).

 

play_sound_on_npc_by_name([[characters_voice\human_03\stalker\talk\dialog\dialog_1]], 0, true, nil, "esc_zvezdochet")

Воспроизведение от непися или просто объекта. Непись определяется по точному имени. Звук следует за неписем. "Правильную" привязку звука к объекту "не осилил".

Параметры аналогичны первому варианту + в конце имя непися или объекта.

 

play_sound_on_npc_by_sid([[characters_voice\human_03\stalker\talk\leave\leave_5]], 0, true, nil, 32) --Кузнецов на Кордоне

Аналогично предыдущему, но объект находится по его story_id.

 

Можно воспроизводить звук с наложением на предыдущий задавая в третьем параметре false. Значение true прервёт проигрывание звуков как без очереди, так и внутри очереди определённой четвёртым параметром.

Для постановки звуков в очередь нужно запускать озвучки (можно разнотипные) с одним и тем же именем очереди, например "SMS".

Для запуска другой очереди просто запускается озвучка с другим именем очереди. Это может быть использовано для оформления диалогов или смс звуковыми спецэффектами.

Есть возможность полной остановки и очистки определённой очереди с помощью функции queue_clear("SMS"), так и полного прерывания и очистки всех очередей вместе взятых - queue_clear_all().

 

Уже сейчас используются в диалогах:

Из dialogs_arhara.xml

<phrase id="1">
<text>zvezdochet_talk_1</text>
<action>sol_sound.zvezdochet_talk_1</action>
<next>2</next>
</phrase>

Из sol_sound.script

function zvezdochet_talk_1()
    play_sound_on_npc_by_name([[characters_voice\human_03\stalker\talk\dialog\dialog_1]], 0, true, nil, "esc_zvezdochet")

    -- или вариант с постановкой в очередь и непрерыванием предыдущего звука в этой очереди:
    --play_sound_on_npc_by_name([[characters_voice\human_03\stalker\talk\dialog\dialog_1]], 0, false, "dialog", "esc_zvezdochet")
    -- тут же можно запустить и другие звуки для атмосферы или по сути сюжета, можно прервать очередь, можно прервать другую очередь ну и вообще вытворять что-угодно...
    -- желательно всё же ограничится только работой со звуком, а другое вызывать из диалога другим екшеном...
end

В диалогах можно практиковать прерывание очереди диалога, а можно ставить всю озвучку диалога в очередь для 100% прослушивания игроком :)

 

Для запуска СМС вместо

-- Звуковое сопровождение
local snd_obj = xr_sound.get_safe_sound_object([[characters_voice\human_03\stalker\talk\leave\leave_66]])
snd_obj:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 1.0)

делать так:

    -- Звуковое сопровождение
    sol_sound.play_sound_on_actor([[characters_voice\human_03\stalker\talk\leave\leave_66]], 0, false, "sms") -- имя звука, задержка, не прерывать звучание очереди, имя очереди

благодаря чему не будет накладывания звука и сокращается количество кода.

Для работы очередей и следования звука за объектом/неписем в апдейт актора нужно добавить:

    if sol_sound then
        sol_sound.update()
    end

Код как мог сделал минимально нагружающим систему как в случае активной озвучки, так и в случае простоя. Поэтому и для того, чтобы звук плавно следовал за объектом ставить под временнУю задержку этот вызов не нужно. Например захочет автор запустить у непися монолог и при этом будет его вместе с ГГ катать по локации на авто/вертолёте/ковре-самолёте, а из-за задержек в апдейтере актора звук будет пространственно отставать от объекта/непися.

Если кто-то "правильно" переделает "звук от объекта/непися" так, что звук будет движком перемещаться за объектом-хозяином, тогда часть кода из апдейтера будет убрана (останется только работа с очередями) и тогда только можно будет ставить вызов sol_sound.update() под небольшую задержку (не больше, чем пол секунды).

 

Реализация в amk.script.

Теперь есть возможность изменять группировку непися с отсрочкой. Пример из new_dialog.script:

function ghange_set(npc) 
    amk.start_timer("change_npc_community", 2, {npc:id(), "killer"})
end

 

Вопросы, критику, предложения, доработки - в личку. Ответы и изменения по сути буду размещать здесь же.

Все скрипты вместе. Актуально для Соли с патчем от 03.09 и готово к употреблению.

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

Ковырялся с Бинд_сталкер.скрипт на предмет выявления главного пожирателя ресурсов и увидел, что один только биорадар съедает до 25% fps! По совету Shadowman`a поставил задержку в четверть секунды в апдейт биорадара и, о чудо! fps вернулся к уровню, когда биорадар вообще не используется, при этом без потери функциональности самого биорадара.

amk.oau_watchdog=182

if xrs_ai then xrs_ai.actor_update(delta) end

if rx_ai then rx_ai.actor_update() end

amk.oau_watchdog=181

-- end of addition

--добавленное выделено жирным шрифтом

if upd_time5 == nil then

upd_time5 = time + 250

elseif upd_time5 < time then

upd_time5 = time + 250

if biodetector then biodetector.update() end

end

amk.oau_watchdog=180

 

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

 

Сколько бы не жрал сейчас, он жрёт меньше, чем до переделки ;)

Но попробуй покрутиться на месте - не будет ли заметных рывков на биорадаре ? Если будут - поробуй уменьшать те 250 мс задержки...

sapsan

Пробовал на 150 мс, тормозов не заметил. А на динамике да, fps примерно одинаков, что с биорадаром, что без него...

Изменено пользователем dimos
Цензура ограничивает творчество © by me
Ссылка на комментарий
...один только биорадар съедает до 25% fps!

dimos, давай уже будем честными до конца: проверили ведь практически всё подозрительное на "пожирание" ресурсов, ведь так?

И ничего кроме биорадара вообще фактически твой проц не кушало. Я к тому, что оборот "один только" можно воспринять так, что фпс можно и в два раза поднять, если ещё чего отключить, а ведь это не так :)

 

V92, ну да, сработал дроп на всё, что было в тайнике. Прикольно :crazy:

 

Сейв мой у тебя есть (чтоб работал поставь читспавнер из моего поста в народном творчестве)

а что интересно такго в читспавнере, что может не давать сейвы грузить? Разве только спавнил квестовиков или еще кого-то из spawn_sections_v92?

 

sapsan про то, как это было написано и работало ранее, лучше не выражаться даже :crazy:

Лично моё мнение - что именно твоя работа по переписке всех напряжных для игры моментов дала возможность Архаре добавить пару-тройку вкусностей.

 

dimos, мы ещё забыли с тобой сказать самое интересное про методику тестирования: чтобы увидеть, что мы с процом делаем, мы же еще и видяху на статику сбрасывыали :)

А то оно конечно да, 25% фпс (85 - 115, кажется?) на статике, но это когда когда видяха влёт справляется. А так - вкатай фул динамику, и что в скриптах ни крути - один фиг, простите :russian_ru:

 

Я аж чуть со стула не упал, когда на статике на Phenom II X4 955 (3,2GHz, 4 ядра 6Mb cache) посмотрел фпс: 120-400 (средний - 200-250 :shok: ). Это на последней Соли. Там, конечно, только 2 ядра задействованы, но еще учесть, что какие-то процессы подгрызают остальные 2...

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

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

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

Поиграл в Солянку. Новые характеристики артефактов не понравились. Мало того, думаю они ни кому нравятся - но, однозначно, предложи свои - они тоже никому не понравятся. :)

 

Возникла идея - а почему бы не включить рандом? То есть при начале игры вычисляется свойства артефактов и модификатов, записываем actor-у (с полкилобайта нужно будет - выдюжит?). Справка меняется (просто нет конкретных цифр). Узнать свойства до получения арта нельзя.

 

Если идея интересна, то (думаю) могу реализовать. Можно два варианта - "дикий" - получаем, что попало (почти), и "привычный" - возьмем медузу - радиоактивность от 1-5 и пулестойкость тоже от 1 до 5, ну и т.д.

 

ЗЫ Технической работы очень много нужно будет. На каждый арт нужны глобальные переменные (вид артефакта - уже есть?) и по три (четыре?) бита на свойство, т. е. 2-3 байта на каждый. Все прописать куда-надо. Кажется это несложно, единственное (пока) мне не ясно, как будут показываться (ну и узнаваться) свойства артефакта в инвентаре. Ну и всяко что-нибудь еще вылезет...

 

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

 

Я в этом не ГУРУ, но может не так страшен черт, как его малюют. Возможно не нужно ничего писать актору в нетпакет. Ведь все свойства объектов пишутся в их собственные пакеты. Для работы со свойствами пакетов разных типов объектов есть готовые функции (read_stalker_params(), read_monster_params(), write_stalker_params(), write_monster_params(), get_anomaly_data(), set_anomaly_data(), get_lc_data(), set_lc_data(), get_breakable_data(), set_breakable_data(), get_spawner_data(), set_spawner_data(), get_restrictor_data(), set_restrictor_data(), get_trader_data(), set_trader_data(), get_invbox_data(), set_invbox_data(), get_ammo_params(), set_ammo_data(), get_destroyable_data(), set_destroyable_data(), get_weapon_data(), set_weapon_data()), но вот для артефактов что-то не нашел... Хотя, как минимум, есть возможность сохранять и получать свои данные из какого-либо объекта с помощью gen_custom_data() parse_custom_data(). Однако это будет просто как довесок. Стоит поискать формат данных для артефактов. Возможно есть готовые функции в запакованных скриптах. А может их можно выудить из описания объектов-артефактов...

sapsan

 

---

 

А интересная идея, все-таки. :) Ну, понял уже, что о конкретике я рано начал говорить.

 

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

 

---

 

Shadowman, По поводу поста из Прохождения... Про ID я упомянул, что встречал примеры, как для нахождения чего-либо использовался цикл по всем возможным ID с проверкой - а тот ли это объект, и видел ответы, что по-другому нельзя.

 

Сильно заметного увеличения времени синхронизации при переходах не заметил, но честно скажу не обращал внимания. Попробую с секундомером посидеть. :)

 

А при превращении трупа непися в зомби после выброса из него все вываливается. Раньше часто на Радаре замечал, ну и сейчас разок на базе Свободы (проснулся после первого разговора с Гавром от выброса - ох, там и много трупов свободовцев оказалось :)).

Изменено пользователем mangust
Ссылка на комментарий
все свойства объектов пишутся в их собственные пакеты... но вот для артефактов что-то не нашел...

mangust, sapsan, парни, я конечно тоже не гуру, но, имхо, без ковыряния движка - не получится. Конфиги объектов берутся из *.ltx и никак иначе.

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

"Рэндомность" свойств (фиктивную) можно реализовать только размножением готовых секций в конфигах (как у броников с разными апдейтами). Но, сами понимаете, работёнка будет нехилая, даже очень. И дело не в написании самих секций, а в последующей правке всего, где что-то прописано по артам.

ЗЫ: Kolmogor, насколько мне известно, занимался подобным вопросом, но вот о результатах я не осведомлён...

 

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

sapsan

 

Хмм... не знаю - не пробовал ковырять нетпакеты предметов - может быть... Я как раз и имел в виду, что именно "свойственные свойства" (те, что читаются из конфигов) - врядли удастся перекрыть скриптами. Если же ты прав - это очень круто, между прочим.

 

sapsan, того, что ты понаписал - нет даже в луа_хелп. Откуда инфа вообще (просмотрел весь скриптовый набор в Сталкере ТЧ)?

 

Оно есть в амк.скрипт. Есть и в других (некоторые очевидно копировали чтобы не зависеть от АМК-мода и сделать свой для чистого ТЧ), но не знаю кто что откуда брал и кто есть изначальными авторами.

sapsan

 

set_* функций, которые ты привёл, не нашел нигде. Мы вообще про какой АМК говорим? Про 1.4.1?

 

наверное ты искал как "set_anomaly_data()", а не просто "set_anomaly_data" :)

sapsan

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

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

Ссылка на комментарий
Shadowman, а кстати вопрос как специалисту, по поводу "зачем вы их подбираете". Ну, с давних пор, не знаю, прав, нет, но стараюсь (не особо, но так, между делом), освобождаться от "мусора" на локах - таскал "вечные" трупы в аномалии (сейчас, конечно, не сильно потаскаешь), разбивал все ящики подряд, мутантов всех выносил (ну там, где как на АС - накапливались). Ну наивно думал, что все имеют свой ID и всякие for i=0, 65535 (или там от 1?) - скачут по ним тоже. Подбирал все брошенное оружие.

 

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

 

Это от смутного подозрения, что такое долгое время синхронизации зависит и от этого. Или это реально мизерные доли по сравнению с тем, что дают новые локи. Или это вообще бред?

 

mangust, давай по порядку.

Ид=0 - у ГГ, 65535 - земля-матушка :)

1) Ид действительно находятся в пределах от 0 до 65535 и назначаются всем объектам в игре, либо явно из аллспавн, либо движком автоматически.

2) Если игра не может назначить ид автоматом из-за переполнения (все ид использованы) - следует вылет "not enough ID's".

3) Если делается попытка заспавнить объект с ид, который в игре уже есть - следует вылет "Specified story object is already in the Story registry!".

 

Оружие, трупы - убираются уборщиком. Те бинты - Сяка и его ф-ция сама их ставит и убирает, нечего их трогать.

Артефакты, не подобранные ГГ и неписями убираются при выбросе. Все, что есть ненужного запросто можно продать торговцам или аннигилировать, как описано выше.

Что такое "выпавшая из зомби мелочь" и почему это выделено тобой отдельно - я не понял. До оббирания живых сталкеров мы пока не дошли - это правда (если не считать утилизатор броников, написанный Сапсаном в уборщик и успешно работающий). Надо будет - дойдём до остального, не проблема.

Долгое время синхронизации - плата за оптимизацию быстродействия в реалтайме. FPS ведь важнее, правда? А лишняя сотня объектов игре - это капля в море, так что не тратьте свое игровое время на ерунду. Если у вас горы трупов на дороге у неписей и вы не хотите, чтобы те их обчистили и ходили с набитыми всякой ерундой рюкзаками - обберите их сами и продайте все лишнее. Если же та же гора трупов где-то в безлюдном месте - не парьтесь, уборщик втихаря эту операцию проделает за вас. Например, если вынести "под ноль" ту же базу вояк на агропроме, и нет желания возиться подбирать лут - можете спокойно вернуться на свалку. Гляньте потом в журнал на сообщения уборщика - и всё будет ясно.

Если хотите, чтобы в вашей игре был порядок и все быстро работало - оперативно утилизируйте все ненужное, держите в нычках только необходимое и не лазьте шаловливыми ручками в файлы игры, и всё будет чики-поки :)

 

mangust, И еще по поводу синхронизации - не замечал, что время синхронизации только при первом старте и загрузке сейва существенно длиннее, чем раньше, а последующие переходы между локами - уже побыстрее?

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

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

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

sapsan, скажу честно: без понятия. Я как-то мельком на это натыкался - не вникал, зачем.

Гдето в скриптах есть ф-ция sak.add_tail() - вот там эта штука зарыта

 

крайт, не должны лежать. Я не горячился. По крайней мере, у меня - так, как я написал (на последней допе). Последняя рука по правкам этого - не моя...

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

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

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

Shadowman,

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

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

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

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

Shadowman, ящики действительно дают подтормаживание, особенно на новых локах.

Я выкладывал логи, где видно: почему так. Аналогично - трупы, пока не убраны.

 

Кроме того, избыток хлама = лишние, ненужные операции как в amk_offline_alife, так в wather_act.

Как и неписи-коллекционеры. Впрочем, по хламу и коллекционерам скоро уже все будет.

 

Upd: ящики - да, все, что можно разбить. Возможно (не проверял) - вообще все перемещаемое.

 

Трупы - штук 5 на локацю - погоды не делают, а уборщик вроде справляется. Вот когда они оставались и копились, скажем, на тех же на Агро/Янтаре, и туда же набегали живые - было уже заметно. Вообще суть засады примерно такая: потестили локу - вроде все хорошо - оставили возможность появления на ней свежего мяса, пока уборщик не почистил ранее настрелянных тушек - у кого-то внезапно начались странности типа тормозов/вылетов. Или, скажем, сделать квест с отстрелом пары десятков каких-нибудь крыс, а после смерти последней добавить в онлайн еще десяток чего-нибудь живого из расчета на то, что тушки ресурсов больше не жрут - это тоже будет плохой идеей.

 

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

Arhara, странный какой-то способ... надо будет посмотреть, как это по-человечески реализовать.

 

Dennis_Chikin, про трупы разговора вроде не было... к тому же, не забывай, что есть таблица исключений: кого не убирать (неправильно только одно - это значит не убирать никогда). По сути, вечно-трупиков не так уж и много... Да и с кого тогда тайники брать? Только распитием водки тогда.

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

А ящики - это какие? Деревянные, те, что ножичком можно разбить?

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

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

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

В последнее время участились жалобы на вылеты из-за текстур,которые не может обработать Direct3D.

Возможной (хотя и не единственной) причиной таких вылетов является то, что создатели многочисленных модов,

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

Например для текстур оружия и бампов к ним правильным является формат DXT5 с мип-мапами, а для прицельных

сеток DXT5 без мип-мапов. Если заглянуть в текстуры оружия в солянке, то можно увидеть поразительное разнообразие форматов. Узнать правильный формат можно, посмотрев аналогичные текстуры в оригинальных ресурсах игры.

Размеры текстур также частенько не соответствуют стандарту для файлов DDS.

(Длина сторон текстуры в пикселах должна быть степенью числа 2).

Просьба к создателям солянки обращать внимание на подобные "мелочи".

P.S. Фотошоп поддерживает пакетную обработку файлов.

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

deadmoroz, кроме оружейных, есть ведь еще и другие текстуры...

Вобщем, «Огласите, пожалуйста, весь список» © :)

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

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

В общих чертах: если текстура рассматривается всегда в масштабе 1:1 (меню, худ), то мип-мапы не нужны, если

используется для "обтягивания" модели в игре - то нужны.

По моим наблюдениям, особенно нервно движок реагирует на текстуры в формате 32bit-A8R8G8B8.

 

Думаю, что все были бы рады помощи в этом деле. Либо прямой, либо инструкции :)sapsan

Я уже работаю в этом направлении.

Но есть вопрос, на который скорее всего сможет ответить malandrinus:

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

доработать текстуры нестандартного размера ? (у всех оригинальных текстур стороны стандартные)

1 Отмасштабировать до стандартного (если квадратная)

2 Нарастить чёрным до сандартного. И где располагать изображение - в центре или в углу

3 Допустимо ли растягивать/сжимать изображение (искажая его)

 

Перезалито by Shadowman

содержит папки act и death_mod.

Ещё текстурки Зеркало

Папки 1, artifact, cod4, intro, map, ui, water, zimovie.

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

deadmoroz,

особенно нервно движок реагирует на текстуры в формате 32bit-A8R8G8B8

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

 

Вообще, ни в движке ни в DirectX нет запрета на текстуры со стороной, не равной степени двойки. Это просто оптимальный размер для обработки. Нет также жёсткой привязки к формату DXT5. Это опять же просто наиболее приемлемый формат для большинства случаев. Разницы с DXT3 почти никакой нет. Иногда можно сократить размер текстур, используя DXT1. В этом случае слой прозрачности будет однобитный, т.е. просто маска. Вполне кстати подходит для большинства текстур худа. При этом двукратная выгода по размеру.

 

Навести порядок с мипмапами надо однозначно. Для текстур худа мипмапы - просто ненужная трата памяти и диска. Отсутствие их-же в текстурах для "обшкуривания" объектов приведёт к диким тормозам с одной стороны, и к довольно мерзенькой отрисовке удалённых объектов с другой. Такая рябь появляется и как будто переливаться начинает.

 

Помнится, было такое дело в солянке для ЧН. Народ жаловался на дикие тормоза. При этом владельцы топовых мегакарточек ни на что не жаловались =) Вопрос решился полной перепаковкой всего набора текстур.

 

Плагины Total Commander для работы с игровыми архивами:

Архиваторный плагин (для работы с одиночным архивом): link1 link2

Системный плагин (для распаковки установленной игры): link1 link2

 

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

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