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

Прозекторская


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

"Вскрытие показало, что больной умер от вскрытия."

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

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

@Zander_driver, мне кажется, полезно будет сделать

snd_ini = system_ini()

вместо

snd_ini = ini_file("misc\\script_sound.ltx")

В самом script_sound.ltx добавить определенный префикс ко всем секциям. Я использую "script_sound.". Конечно не забыть этот ltx за-include-ить в системные конфиги. А в самом скрипте добавить этот префикс везде, где используются имена секций. Какой смысла загружать script_sound.ltx при загрузке каждого сейва, если это можно сделать один раз, при первом запуске игры.

 

Это, на мой взгляд, полезно сделать вообще для всех таких конфигов, типа death_generic, treasure_manager и т.п.

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

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

Тем более что это "изменение" расположено во время загрузки... Загружу я сейв за 40 секунд, или за 40,1 - мне от такого ни холодно ни жарко.

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

Изменено пользователем Zander_driver
  • Согласен 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

"История одной пессимизации", смею напомнить, да... Всего-то 2 минуты вместо 40 секунд оригинала и 5 секунд для сделанного по-человечески.

 

Это к тому, что не все ltxы надо пихать во все подряд, и не все, что можно запихнуть в ltxы - нужно запихивать в ltxы.

Касательно же звука, рекомендую поискать в теме "разработки" солянковской. Там все разжевано весьма избыточно. И про чтение конфига, и про загрузку в неписей и прочие громкоговорители с вертолетами, и что с этим делать.

Ссылка на комментарий
Касательно же звука, рекомендую поискать в теме "разработки" солянковской

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

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

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

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

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

Помнится, когда в тот раз выкладывалось, нашлось сразу с десяток этих самых униженных и оскорбленных тем, что я указал на БТР, у которого из двигателя звуки балалайки доносятся. Вот мне уже 4 года это напоминать не устают - как я Унизил И Оскорбил Очень Уважаемых Людей, а также грубо нарушил ихние аффтырьские права.

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

 

Суть кактуса описана здесь:

http://www.amk-team.ru/forum/topic/8830-narodnaia-2010-razrabotka/page-34#entry763618ну и далее, вот по сюда: http://www.amk-team.ru/forum/topic/8830-narodnaia-2010-razrabotka/page-39#entry794407

  • Нравится 1
Ссылка на комментарий

Две минуты. 40 секунд. Во первых, это же зависит от кол-ва загружаемого, да? А во вторых, насколько я вижу, основное время тратиться в npc:add_sound() и что-то я не вижу никакого способа это ускорить. Ведь ему нельзя передать уже загруженный звук. Да и не имеет это смысла. Насколько я вижу в исходниках, он сам звуки кэширует и не загружает с диска уже загруженный звук. Что касается скрипта, так у меня, к примеру, он не дал никакого ускорения. Как было около 14 секунд на звуки при холодном старте, и примерно 4 при повторной загрузке сейва (в Баре), так и осталось. Мне собственно не понятно даже, а как там что-то может ускоряться. Насколько я вижу, по сути, скрипт кэширует результаты check_prefix() и чтение ltx-а. Ни первое, ни второе кэшировать нет смысла. Первое - это string.sub() и второе такое же движковое. Миллисекунды максимум. Совершенно не в обиду сказано. Может я чего не заметил? Тогда ткните меня носом, где именно там ускорение должно происходить?

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

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

 

Именно так. По-этому, перекладываем одинаковые звуки по соответствующему пути, и прописываем им тип 2 или 3. В результате - одинаковые звуки читаются один раз.

 

(2 минуты и 40 секунд - это несколько про другое. Здесь - скорее про лаги уже по ходу игры. Впрочем, некоторая разница, в районе десятка секунд при загрузке, скажем, в "деревне новичков" и тем более, центре бара - будет.

 

 

Плюс к тому уникальные звуки надо вынести по уникальным путям, и грузить вообще не через themes. Ибо если включить лог, и посмотреть, кому что читается - это - страшно.

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

 

 

Именно так. По-этому, перекладываем одинаковые звуки по соответствующему пути, и прописываем им тип 2 или 3. В результате - одинаковые звуки читаются один раз.

 

Ну вот, собственно. Самая лучшая оптимизация - это разгребание этих самых звуков, как ты и писал про конюшни.

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

 

 

Может я чего не заметил?

Наверное тестов моих не заметил. Там цифры какие-то есть, и они почему-то разные.

 

 

Плюс к тому уникальные звуки надо вынести по уникальным путям, и грузить вообще не через themes. Ибо если включить лог, и посмотреть, кому что читается - это - страшно.

Вот это справедливо, плюсую. логи включал, смотрел, выпадал в осадок от увиденного.

зы. кактусы не люблю, мышью быть не хочется :)

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

 

 

Наверное тестов моих не заметил. Там цифры какие-то есть, и они почему-то разные.

 

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

 

Вообще, насколько я себе представляю кухню npc:add_sound(). Да, сделано не красиво с точки зрения искусства. В непися загружаются все звуки, в том числе и те, которые он использовать не будет. Типа речей Сахарова или что там еще есть. Но что происходит внутри? Выходит в онлайн первый непись. В него загружается все. А на самом деле, загружаются звуки в некоторый, назовем его так, кэш. А в непися грузится табличка с id этих звуков. Далее выходит в онлайн второй непись. В него загружаются все звуки опять. Но так как они уже загружены в тот "кэш" первым неписем, то самой загрузки уже не происходит, а во второго непися загружается только табличка с id звуков. И так далее для каждого следующего. Что тут можно ускорить? Даже если убрать загрузку всех звуков в непися и оставить только те, которые он может использовать, это ускорит процесс только на время однократного чтения тех, лишних, звуков. Стоит-ли оно того? А может у меня неверное представление и все происходит совсем по другому?

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

Ну вот например звуки бормотания зомбей и раненых по psy_health.

Почему-то читаются очень долго. Дублированы для ВСЕХ профилей.

 

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

То есть, оно тогда прочитается только один раз, а не столько, сколько неписей с разными профилями находится в онлайне.

 

Во вторых, стоит подумать о том, чтобы вообще тему подгружать из xr_wounded, раз уж там включаются. Когда включать собрались.

 

Что это даст: отсутствие лага при входе в онлайн непися с новым профилем. Сокращение времени загрузки в местах с толпами неписей.

 

А сахаров не нужен ни кому, кроме собственно сахарова. Это даст как сокращение лагов, так и собственно загрузки.

Ссылка на комментарий
Не, ну я не знаю, что там у тебя раньше было-то

sound_theme.script оригинального ТЧ был. Там как бы сама кухня эта, в процессе определения кому и какие звуки подрубать в npc:add_sound() - уже сама по себе жрала прилично, потому что цикл, а в нем еще цикл, а в нем может быть еще, а внутри вызываем функции но результаты их работы никуда не запоминаем и потому дергаем на каждой итерации цикла заново.

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

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Кстати Денис, я тебя конечно уважаю, но

http://www.amk-team.ru/forum/topic/13078-prozektorskaia/?view=findpost&p=904591

ты прости, работу этого файла проверял? игру с ним запускал?

Я между прочим знаю что нет. Не проверял, не тестировал, не запускал.

 

История то давняя... когда этот файл тут появился, я его сначала в WinMerge открывал. там просто все оранжевое) ладно думаю, попробую напролом. поменял свой старый на этот. вылет, один, другой, третий. отложил на потом.

Вот пришло это потом, стал ковыряться в чем дело...

local c_wnp = _G.c_wpn or {}	-- здесь должна быть табличка clsid стволов.

объявляешь ее локально для модуля как c_wnp, потом в модуле используешь как c_wpn. Просто некрасиво но сразу доказывает что код тупо не проверялся на вот такие ляпы.

Дальше веселее.

function parse_data1( s )
function parse_syn_data( s )

функции находятся прямо в коде модуля.

и в этом же модуле далее по тексту

local t_def_nil = {
	["meet_state"]		= parse_data1( "5|wait@wait" ),
	["meet_state_wpn"]	= parse_data1( "5|backoff@threat_weap" ),
	["victim"]		= parse_data1( "5|actor" ),
	["victim_wpn"]		= parse_data1( "5|actor" ),

	["use"]			= { { ["section"] = "true", ["infop_check"] = {}, ["infop_set"] = {} } },
	["use_wpn"]		= { { ["section"] = "false", ["infop_check"] = {}, ["infop_set"] = {} } },
	["syndata"]		= parse_syn_data( "backoff@threat_weap" ),

	["init_meet"]		= "talk_hello",
	["precond"]		= "visibility",
	["abuse"]		= "true" } 

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

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

Разжевываю для тех кто не понял.

При первом упоминании xr_meet где-нибудь, движок приступает к компиляции модуля. Модуль будет доступен тогда, когда она завершится, до этого - он как бы еще не существует.

и вот компилятор добирается до строчки ["meet_state"]        = parse_data1( "5|wait@wait" ),

он видит parse_data1. ее как бы надо вызвать, но где она? в этом же модуле который еще не собран. т.е. функция - не доступна. И знаете что происходит? компиляция прекращается на этом самом месте, что несложно установить просто поставив вызовы printf("проверка") между функций и таблиц. Компиляция обрывается, вернув скомпилированный обрубок кода в качестве модуля. проверки if xr_meet then return true end - исправно возвращают true, функции расположенные в нем ДО проблемного места исправно работают. Кусок кода расположенный ПОСЛЕ этого чудного маневра, просто отваливается.

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

2016 год на дворе.

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Че ты взъелся? Все, кто пишет на луа не первый год, знают о видимости переменных и докапываться до такого совершенно не серьезно. У Дениса хорошие решения, и он там все подписал, кто не понял - сам виноват.

 

Со звуками поддержу, беда-беда, причем катастрофическая и везде. Планово переписывается, сложного ничего нет вообще.

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

"ты прости, работу этого файла проверял? игру с ним запускал?

Я между прочим знаю что нет. Не проверял, не тестировал, не запускал."

 

Ты неправильно знаешь. Про затычку там написано. Если определено, хоть где-то, то работает.

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

 

В чем проблема с обратиться к функции, описанной до обращения - ВАЩЕ ни панимаю.

Судя по тому, что ты используешь printf, который У ТЕБЯ работает - это какие-то проблемы с особенностями твоего компилятора.

 

P.S. И, да, опечатки в именах переменных - это вечная проблема языков без нормального декларирования оных переменных. Хорошо, когда переменная нигде больше не определена, и получаем вылет. Если, как у меня, определена в global_space - ну не выловить ни какими тестами. 8(

Хоть тресни, но работает, пока кто-нибудь не займется переносом.

Изменено пользователем Dennis_Chikin
Ссылка на комментарий
В чем проблема с обратиться к функции, описанной до обращения - ВАЩЕ ни панимаю.

в том что модуль еще не собран. а она нужна для его сбора.

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

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

Изменено пользователем Ааз
  • Согласен 1

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Если их выкладывать "в таком виде" - а это как ? Опять передавать в xr_logic непися с гулагом, чтобы он там благополучно повис, хотя достаточно простого разбора в таблицу простой строки ?

 

Угадать, какое оружие используется у этого "не-скриптера", и магическим образом сделать так, чтобы он скачивал файл с индивидуально заполненной под него табличкой ? Или опять откатиться до  if object_type(obj) == "item", и получить роскошный висяк, если item почему-то оказался ни разу не оружием ?

 

Опять везде вернуть чертово if db.actor then db.actor:чегототам(), которое ни от чего не спасает, но само по себе раздолье для вот таких вот опечаток с переставленными буквами ?

 

Я просто не понимаю: ну ВОТ КАК ??? Кроме того, что все описано в комментариях непосредственно в начале файла.

Опиши, если не сильно затрудняет.

 

P.S.

function test_jit() return true end

if test_jit() then log( "info", "test_jit ok" ) end
! Cannot find saved game ~info~ [cheat] test_jit ok

 

ЧТО Я ДЕЛАЮ НЕ ТАК ???

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

Да причем тут xr_logic и откат к древнеиндусским монстрокодам. Я же не об этом толкую блин. Просто чтобы файл требовал меньше телодвижений при его подключении к произвольно-стороннему проекту.

 

 

ну ВОТ КАК ???
-- Функция чтения настроек. В нее передается секция, откуда их нужно читать.

local t_def_nil
local t_def_kamp
local t_def_fotoman
local t_def_bandit
local t_def_other
function init_tables()

t_def_nil = {
    ["meet_state"]        = parse_data1( "5|wait@wait" ),
и тэ дэ по тексту...

Ну вот так например.

local xr_meet_initialized = false
function init()
    if not xr_meet_initialized then
    init_tables()
    xr_meet_initialized = true
    end
return true end

и вот так.

И наконец в начале функций где эти таблички используются, вот так.

function init_meet( npc, ini, sect, st, scheme )
xr_meet.init()
далее тело функции

И все будет крутиться само при помещении этого файла в какой угодно проект. Список clsid стволов согласен, должны уж сами догадываться занести. Впрочем я вряд ли ошибусь, если скажу что в большинстве модов этот список не отличается от оригинала.

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

Смысл этих шаманских плясок ? Я реально не понимаю, что у тебя за компилятор такой, который компилирует/запускает не построчно.

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

Не считая расширения от RvP, у меня стандартный движок ТЧ. Оригинальный.

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

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

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

Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine.

Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист.

AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD.

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

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

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

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

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

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

Войти

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

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

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